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 00013778 00015f64 arch/arm64/kvm/hyp/nvhe/../pgtable.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 **00013778 <kvm_pgtable_walk>: 00013778 <$x>: + kvm_pgtable_walk params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13778 0x137dc (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x10) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x18) +walker param pointer(struct kvm_pgtable_walker<d70f1>/<e7095>) 0x13778 0x137dc (DW_OP_breg31 0x20) kvm_pgtable_walk:296.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13778 0x137dc (DW_OP_fbreg -0x8) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x10) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x18) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 +walker param pointer(struct kvm_pgtable_walker<d70f1>/<e7095>) 0x13778 0x137dc (DW_OP_breg31 0x20) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:295 +walk_data var struct kvm_pgtable_walk_data<d70f1>/<e7105> 0x13778 0x137dc (DW_OP_breg31 0x0) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:297 ~ 00013778: d10143ff sub sp, sp, #0x50 <- 000139a0(bl)<kvm_pgtable_walk>,00013db0(bl)<kvm_pgtable_walk>,00013f2c(bl)<kvm_pgtable_walk>,00014398(bl)<kvm_pgtable_walk>,00014614(bl)<kvm_pgtable_walk>,00014994(bl)<kvm_pgtable_walk>,00014c3c(bl)<kvm_pgtable_walk> ~ 0001377c: a9047bfd stp x29, x30, [sp, #64] 00013778 CFA:r31 r29:u r30:u ~ 00013780: 910103fd add x29, sp, #0x40 ~ 00013784: f81f83a0 stur x0, [x29, #-8] ~ 00013788: f81f03a1 stur x1, [x29, #-16] ~ 0001378c: f81e83a2 stur x2, [x29, #-24] ~ 00013790: f90013e3 str x3, [sp, #32] kvm_pgtable_walk:298.10 (pgtable.c) SbePe .pgt = ║pgt, ~ 00013794: f85f83a8 ldur x8, [x29, #-8] kvm_pgtable_walk:297.43 (pgtable.c) Sbepe struct kvm_pgtable_walk_data walk_data = { ~ 00013798: f90003e8 str x8, [sp] kvm_pgtable_walk:301.13 (pgtable.c) Sbepe .walker = ║walker, ~ 0001379c: f94013e8 ldr x8, [sp, #32] kvm_pgtable_walk:297.43 (pgtable.c) Sbepe struct kvm_pgtable_walk_data walk_data = { ~ 000137a0: f90007e8 str x8, [sp, #8] kvm_pgtable_walk:299.11 (pgtable.c) Sbepe .addr = ║ALIGN_DOWN(addr, PAGE_SIZE), ~ 000137a4: f85f03a8 ldur x8, [x29, #-16] ~ 000137a8: 9274cd08 and x8, x8, #0xfffffffffffff000 kvm_pgtable_walk:297.43 (pgtable.c) Sbepe struct kvm_pgtable_walk_data walk_data = { ~ 000137ac: f9000be8 str x8, [sp, #16] kvm_pgtable_walk:300.10 (pgtable.c) Sbepe .end = ║PAGE_ALIGN(walk_data.addr + size), ~ 000137b0: f9400be8 ldr x8, [sp, #16] ~ 000137b4: f85e83a9 ldur x9, [x29, #-24] ~ 000137b8: 8b090108 add x8, x8, x9 ~ 000137bc: 913ffd08 add x8, x8, #0xfff ~ 000137c0: 9274cd08 and x8, x8, #0xfffffffffffff000 kvm_pgtable_walk:297.43 (pgtable.c) Sbepe struct kvm_pgtable_walk_data walk_data = { ~ 000137c4: f9000fe8 str x8, [sp, #24] ~ 000137c8: 910003e0 mov x0, sp kvm_pgtable_walk:304.9 (pgtable.c) Sbepe return ║_kvm_pgtable_walk(&walk_data); ~ 000137cc: 94000004 bl 137dc <_kvm_pgtable_walk> kvm_pgtable_walk:304.2 (pgtable.c) sbepe ║return _kvm_pgtable_walk(&walk_data); ~ 000137d0: a9447bfd ldp x29, x30, [sp, #64] <- 000137cc(bl-succ)<return> ~ 000137d4: 910143ff add sp, sp, #0x50 00013784 CFA:r29+16 r29:c-16 r30:c-8 ~ 000137d8: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13778 0x137dc (DW_OP_fbreg -0x8) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x10) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13778 0x137dc (DW_OP_fbreg -0x18) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:294 -walker param pointer(struct kvm_pgtable_walker<d70f1>/<e7095>) 0x13778 0x137dc (DW_OP_breg31 0x20) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:295 -walk_data var struct kvm_pgtable_walk_data<d70f1>/<e7105> 0x13778 0x137dc (DW_OP_breg31 0x0) kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:297 **000137dc <_kvm_pgtable_walk>: + _kvm_pgtable_walk params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x137dc 0x1390c (DW_OP_fbreg -0x10) _kvm_pgtable_walk:271.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x137dc 0x1390c (DW_OP_fbreg -0x10) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:270 +idx var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x137dc 0x1390c (DW_OP_fbreg -0x14) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:272 +ret var int (base type, DW_ATE_signed size:4) 0x137dc 0x1390c (DW_OP_breg31 0x18) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:273 +pgt var pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x137dc 0x1390c (DW_OP_breg31 0x10) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:274 +limit var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x137dc 0x1390c (DW_OP_breg31 0x8) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:275 ~ 000137dc: d10103ff sub sp, sp, #0x40 <- 000137cc(bl)<_kvm_pgtable_walk> ~ 000137e0: a9037bfd stp x29, x30, [sp, #48] 000137dc CFA:r31 r29:u r30:u ~ 000137e4: 9100c3fd add x29, sp, #0x30 ~ 000137e8: f81f03a0 stur x0, [x29, #-16] ~ 000137ec: 2a1f03e8 mov w8, wzr _kvm_pgtable_walk:273.6 (pgtable.c) SbePe int ║ret = 0; ~ 000137f0: b9001be8 str w8, [sp, #24] _kvm_pgtable_walk:274.28 (pgtable.c) Sbepe struct kvm_pgtable *pgt = ║data->pgt; ~ 000137f4: f85f03a9 ldur x9, [x29, #-16] _kvm_pgtable_walk:274.34 (pgtable.c) sbepe struct kvm_pgtable *pgt = data->║pgt; ~ 000137f8: f9400129 ldr x9, [x9] _kvm_pgtable_walk:274.22 (pgtable.c) sbepe struct kvm_pgtable *║pgt = data->pgt; ~ 000137fc: f9000be9 str x9, [sp, #16] _kvm_pgtable_walk:275.14 (pgtable.c) Sbepe u64 limit = ║BIT(pgt->ia_bits); ~ 00013800: f9400be9 ldr x9, [sp, #16] ~ 00013804: b9400128 ldr w8, [x9] ~ 00013808: 2a0803e9 mov w9, w8 ~ 0001380c: 52800028 mov w8, #0x1 // #1 ~ 00013810: 2a0803ea mov w10, w8 ~ 00013814: 9ac92149 lsl x9, x10, x9 _kvm_pgtable_walk:275.6 (pgtable.c) sbepe u64 ║limit = BIT(pgt->ia_bits); ~ 00013818: f90007e9 str x9, [sp, #8] _kvm_pgtable_walk:277.6 (pgtable.c) Sbepe if (║data->addr > limit || data->end > limit) ~ 0001381c: f85f03a9 ldur x9, [x29, #-16] _kvm_pgtable_walk:277.12 (pgtable.c) sbepe if (data->║addr > limit || data->end > limit) ~ 00013820: f9400929 ldr x9, [x9, #16] _kvm_pgtable_walk:277.19 (pgtable.c) sbepe if (data->addr > ║limit || data->end > limit) ~ 00013824: f94007ea ldr x10, [sp, #8] _kvm_pgtable_walk:277.25 (pgtable.c) sbepe if (data->addr > limit ║|| data->end > limit) ~ 00013828: eb0a0129 subs x9, x9, x10 ~ ┌────0001382c: 54000108 b.hi 1384c <_kvm_pgtable_walk+0x70> // b.pmore ~ │ ┌─00013830: 14000001 b 13834 <_kvm_pgtable_walk+0x58> <- 0001382c(b.cc-succ)<fallthrough> │ │ │ │ _kvm_pgtable_walk:277.28 (pgtable.c) sbepe if (data->addr > limit || ║data->end > limit) ~ │ └>00013834: f85f03a8 ldur x8, [x29, #-16] <- 00013830(b)<_kvm_pgtable_walk+0x58> _kvm_pgtable_walk:277.34 (pgtable.c) sbepe if (data->addr > limit || data->║end > limit) ~ 00013838: f9400d08 ldr x8, [x8, #24] _kvm_pgtable_walk:277.40 (pgtable.c) sbepe if (data->addr > limit || data->end > ║limit) ~ 0001383c: f94007e9 ldr x9, [sp, #8] _kvm_pgtable_walk:277.6 (pgtable.c) sbepe if (║data->addr > limit || data->end > limit) ~ 00013840: eb090108 subs x8, x8, x9 ~ │ ┌──00013844: 540000a9 b.ls 13858 <_kvm_pgtable_walk+0x7c> // b.plast │ │ ~ │ │┌─00013848: 14000001 b 1384c <_kvm_pgtable_walk+0x70> <- 00013844(b.cc-succ)<fallthrough> │ ││ ~ └>│└>0001384c: 12800428 mov w8, #0xffffffde // #-34 <- 0001382c(b.cc)<_kvm_pgtable_walk+0x70>,00013848(b)<_kvm_pgtable_walk+0x70> _kvm_pgtable_walk:278.3 (pgtable.c) Sbepe ║return -ERANGE; ~ 00013850: b81fc3a8 stur w8, [x29, #-4] ~ ┌──────┼──00013854: 1400002a b 138fc <_kvm_pgtable_walk+0x120> │ │ │ │ _kvm_pgtable_walk:280.7 (pgtable.c) Sbepe if (!║pgt->pgd) ~ │ └─>00013858: f9400be8 ldr x8, [sp, #16] <- 00013844(b.cc)<_kvm_pgtable_walk+0x7c> _kvm_pgtable_walk:280.12 (pgtable.c) sbepe if (!pgt->║pgd) ~ 0001385c: f9400508 ldr x8, [x8, #8] _kvm_pgtable_walk:280.6 (pgtable.c) sbepe if (║!pgt->pgd) ~ │ ┌──00013860: b50000a8 cbnz x8, 13874 <_kvm_pgtable_walk+0x98> │ │ ~ │ │┌─00013864: 14000001 b 13868 <_kvm_pgtable_walk+0x8c> <- 00013860(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00013868: 128002a8 mov w8, #0xffffffea // #-22 <- 00013864(b)<_kvm_pgtable_walk+0x8c> │ │ _kvm_pgtable_walk:281.3 (pgtable.c) Sbepe ║return -EINVAL; ~ │ │ 0001386c: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌────┼──00013870: 14000023 b 138fc <_kvm_pgtable_walk+0x120> │ │ │ │ │ │ _kvm_pgtable_walk:283.30 (pgtable.c) Sbepe for (idx = kvm_pgd_page_idx(║data); data->addr < data->end; ++idx) { ~ │ │ └─>00013874: f85f03a0 ldur x0, [x29, #-16] <- 00013860(b.cc)<_kvm_pgtable_walk+0x98> │ │ _kvm_pgtable_walk:283.13 (pgtable.c) sbepe for (idx = ║kvm_pgd_page_idx(data); data->addr < data->end; ++idx) { ~ │ │ 00013878: 94000542 bl 14d80 <kvm_pgd_page_idx> │ │ │ │ _kvm_pgtable_walk:283.11 (pgtable.c) sbepe for (idx ║= kvm_pgd_page_idx(data); data->addr < data->end; ++idx) { ~ │ │ 0001387c: b81ec3a0 stur w0, [x29, #-20] <- 00013878(bl-succ)<return> │ │ _kvm_pgtable_walk:283.7 (pgtable.c) sbepe for (║idx = kvm_pgd_page_idx(data); data->addr < data->end; ++idx) { ~ │ │ ┌─00013880: 14000001 b 13884 <_kvm_pgtable_walk+0xa8> │ │ │ │ │ │ _kvm_pgtable_walk:283.37 (pgtable.c) sbepe for (idx = kvm_pgd_page_idx(data); ║data->addr < data->end; ++idx) { ~ │ │ ╔══>└>00013884: f85f03a8 ldur x8, [x29, #-16] <- 00013880(b)<_kvm_pgtable_walk+0xa8>,v000138ec(b)<_kvm_pgtable_walk+0xa8> │ │ ║ _kvm_pgtable_walk:283.43 (pgtable.c) sbepe for (idx = kvm_pgd_page_idx(data); data->║addr < data->end; ++idx) { ~ │ │ ║ 00013888: f9400909 ldr x9, [x8, #16] │ │ ║ _kvm_pgtable_walk:283.56 (pgtable.c) sbepe for (idx = kvm_pgd_page_idx(data); data->addr < data->║end; ++idx) { ~ │ │ ║ 0001388c: f9400d08 ldr x8, [x8, #24] │ │ ║ _kvm_pgtable_walk:283.2 (pgtable.c) sbepe ║for (idx = kvm_pgd_page_idx(data); data->addr < data->end; ++idx) { ~ │ │ ║ 00013890: eb080128 subs x8, x9, x8 ~ │ │┌╫─────00013894: 540002e2 b.cs 138f0 <_kvm_pgtable_walk+0x114> // b.hs, b.nlast │ ││║ ~ │ ││║ ┌─00013898: 14000001 b 1389c <_kvm_pgtable_walk+0xc0> <- 00013894(b.cc-succ)<fallthrough> │ ││║ │ │ ││║ │ _kvm_pgtable_walk:284.22 (pgtable.c) Sbepe kvm_pte_t *ptep = &║pgt->pgd[idx * PTRS_PER_PTE]; +ptep var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1389c 0x138e0 (DW_OP_breg31 0x0) lexblock:_kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:284 ~ │ ││║ └>0001389c: f9400be8 ldr x8, [sp, #16] <- 00013898(b)<_kvm_pgtable_walk+0xc0> │ ││║ _kvm_pgtable_walk:284.27 (pgtable.c) sbepe kvm_pte_t *ptep = &pgt->║pgd[idx * PTRS_PER_PTE]; ~ │ ││║ 000138a0: f9400508 ldr x8, [x8, #8] │ ││║ _kvm_pgtable_walk:284.31 (pgtable.c) sbepe kvm_pte_t *ptep = &pgt->pgd[║idx * PTRS_PER_PTE]; ~ │ ││║ 000138a4: b85ec3a9 ldur w9, [x29, #-20] │ ││║ _kvm_pgtable_walk:284.35 (pgtable.c) sbepe kvm_pte_t *ptep = &pgt->pgd[idx ║* PTRS_PER_PTE]; ~ │ ││║ 000138a8: 53175929 lsl w9, w9, #9 │ ││║ _kvm_pgtable_walk:284.22 (pgtable.c) sbepe kvm_pte_t *ptep = &║pgt->pgd[idx * PTRS_PER_PTE]; ~ │ ││║ 000138ac: 8b294d08 add x8, x8, w9, uxtw #3 │ ││║ _kvm_pgtable_walk:284.14 (pgtable.c) sbepe kvm_pte_t *║ptep = &pgt->pgd[idx * PTRS_PER_PTE]; ~ │ ││║ 000138b0: f90003e8 str x8, [sp] │ ││║ _kvm_pgtable_walk:286.28 (pgtable.c) Sbepe ret = __kvm_pgtable_walk(║data, ptep, pgt->start_level); ~ │ ││║ 000138b4: f85f03a0 ldur x0, [x29, #-16] │ ││║ _kvm_pgtable_walk:286.34 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, ║ptep, pgt->start_level); ~ │ ││║ 000138b8: f94003e1 ldr x1, [sp] │ ││║ _kvm_pgtable_walk:286.40 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, ptep, ║pgt->start_level); ~ │ ││║ 000138bc: f9400be8 ldr x8, [sp, #16] │ ││║ _kvm_pgtable_walk:286.45 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, ptep, pgt->║start_level); ~ │ ││║ 000138c0: b9400502 ldr w2, [x8, #4] │ ││║ _kvm_pgtable_walk:286.9 (pgtable.c) sbepe ret = ║__kvm_pgtable_walk(data, ptep, pgt->start_level); ~ │ ││║ 000138c4: 9400053a bl 14dac <__kvm_pgtable_walk> │ ││║ │ ││║ _kvm_pgtable_walk:286.7 (pgtable.c) sbepe ret ║= __kvm_pgtable_walk(data, ptep, pgt->start_level); ~ │ ││║ 000138c8: b9001be0 str w0, [sp, #24] <- 000138c4(bl-succ)<return> │ ││║ _kvm_pgtable_walk:287.7 (pgtable.c) Sbepe if (║ret) ~ │ ││║ 000138cc: b9401be9 ldr w9, [sp, #24] │ ││║ _kvm_pgtable_walk:287.7 (pgtable.c) sbepe if (║ret) ~ │ ││║ ┌───000138d0: 34000069 cbz w9, 138dc <_kvm_pgtable_walk+0x100> │ ││║ │ ~ │ ││║ │ ┌─000138d4: 14000001 b 138d8 <_kvm_pgtable_walk+0xfc> <- 000138d0(b.cc-succ)<fallthrough> │ ││║ │ │ │ ││║ │ │ _kvm_pgtable_walk:288.4 (pgtable.c) Sbepe ║break; ~ │ ││║┌┼─└>000138d8: 14000006 b 138f0 <_kvm_pgtable_walk+0x114> <- 000138d4(b)<_kvm_pgtable_walk+0xfc> │ ││║││ │ ││║││ _kvm_pgtable_walk:289.2 (pgtable.c) Sbepe } ~ │ ││║│└>┌─000138dc: 14000001 b 138e0 <_kvm_pgtable_walk+0x104> <- 000138d0(b.cc)<_kvm_pgtable_walk+0x100> -ptep var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1389c 0x138e0 (DW_OP_breg31 0x0) lexblock:_kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:284 │ ││║│ │ │ ││║│ │ _kvm_pgtable_walk:283.61 (pgtable.c) Sbepe for (idx = kvm_pgd_page_idx(data); data->addr < data->end; ║++idx) { ~ │ ││║│ └>000138e0: b85ec3a8 ldur w8, [x29, #-20] <- 000138dc(b)<_kvm_pgtable_walk+0x104> ~ │ ││║│ 000138e4: 11000508 add w8, w8, #0x1 ~ │ ││║│ 000138e8: b81ec3a8 stur w8, [x29, #-20] │ ││║│ _kvm_pgtable_walk:283.2 (pgtable.c) sbepe ║for (idx = kvm_pgd_page_idx(data); data->addr < data->end; ++idx) { ~ │ ││╚╪════000138ec: 17ffffe6 b 13884 <_kvm_pgtable_walk+0xa8> │ ││ │ │ ││ │ _kvm_pgtable_walk:291.9 (pgtable.c) Sbepe return ║ret; ~ │ │└>└───>000138f0: b9401be8 ldr w8, [sp, #24] <- 00013894(b.cc)<_kvm_pgtable_walk+0x114>,000138d8(b)<_kvm_pgtable_walk+0x114> │ │ _kvm_pgtable_walk:291.2 (pgtable.c) sbepe ║return ret; ~ │ │ 000138f4: b81fc3a8 stur w8, [x29, #-4] ~ │ │ ┌─000138f8: 14000001 b 138fc <_kvm_pgtable_walk+0x120> │ │ │ │ │ │ _kvm_pgtable_walk:292.1 (pgtable.c) Sbepe ║} ~ └>└────>└>000138fc: b85fc3a0 ldur w0, [x29, #-4] <- 00013854(b)<_kvm_pgtable_walk+0x120>,00013870(b)<_kvm_pgtable_walk+0x120>,000138f8(b)<_kvm_pgtable_walk+0x120> ~ 00013900: a9437bfd ldp x29, x30, [sp, #48] ~ 00013904: 910103ff add sp, sp, #0x40 000137e8 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013908: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x137dc 0x1390c (DW_OP_fbreg -0x10) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:270 -idx var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x137dc 0x1390c (DW_OP_fbreg -0x14) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:272 -ret var int (base type, DW_ATE_signed size:4) 0x137dc 0x1390c (DW_OP_breg31 0x18) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:273 -pgt var pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x137dc 0x1390c (DW_OP_breg31 0x10) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:274 -limit var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x137dc 0x1390c (DW_OP_breg31 0x8) _kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:275 **0001390c <kvm_pgtable_hyp_map>: + kvm_pgtable_hyp_map params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x1390c 0x139cc (DW_OP_fbreg -0x10) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x18) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x20) +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x28) +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x1390c 0x139cc (DW_OP_fbreg -0x2c) kvm_pgtable_hyp_map:379.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x1390c 0x139cc (DW_OP_fbreg -0x10) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x18) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x20) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x28) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x1390c 0x139cc (DW_OP_fbreg -0x2c) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:378 +ret var int (base type, DW_ATE_signed size:4) 0x1390c 0x139cc (DW_OP_breg31 0x30) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:380 +map_data var struct hyp_map_data<d70f1>/<e7143> 0x1390c 0x139cc (DW_OP_breg31 0x18) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:381 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x1390c 0x139cc (DW_OP_breg31 0x0) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:385 ~ 0001390c: d101c3ff sub sp, sp, #0x70 <- 0000a700(bl)<kvm_pgtable_hyp_map>,0000a840(bl)<kvm_pgtable_hyp_map> ~ 00013910: a9067bfd stp x29, x30, [sp, #96] 0001390c CFA:r31 r29:u r30:u ~ 00013914: 910183fd add x29, sp, #0x60 ~ 00013918: f81f03a0 stur x0, [x29, #-16] ~ 0001391c: f81e83a1 stur x1, [x29, #-24] ~ 00013920: f81e03a2 stur x2, [x29, #-32] ~ 00013924: f81d83a3 stur x3, [x29, #-40] ~ 00013928: b81d43a4 stur w4, [x29, #-44] kvm_pgtable_hyp_map:382.11 (pgtable.c) SbePe .phys = ║ALIGN_DOWN(phys, PAGE_SIZE), ~ 0001392c: f85d83a8 ldur x8, [x29, #-40] ~ 00013930: 9274cd08 and x8, x8, #0xfffffffffffff000 kvm_pgtable_hyp_map:381.33 (pgtable.c) Sbepe struct hyp_map_data map_data = { ~ 00013934: f9000fe8 str x8, [sp, #24] ~ 00013938: aa1f03e8 mov x8, xzr ~ 0001393c: f90013e8 str x8, [sp, #32] kvm_pgtable_hyp_map:383.13 (pgtable.c) Sbepe .mm_ops = ║pgt->mm_ops, ~ 00013940: f85f03a8 ldur x8, [x29, #-16] kvm_pgtable_hyp_map:383.18 (pgtable.c) sbepe .mm_ops = pgt->║mm_ops, ~ 00013944: f9400908 ldr x8, [x8, #16] kvm_pgtable_hyp_map:381.33 (pgtable.c) Sbepe struct hyp_map_data map_data = { ~ 00013948: f90017e8 str x8, [sp, #40] kvm_pgtable_hyp_map:385.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 0001394c: 90000008 adrp x8, 13000 <host_spsr_to_spsr32+0x3c> ~ 00013950: 91273108 add x8, x8, #0x9cc ~ 00013954: f90003e8 str x8, [sp] ~ 00013958: 910063e8 add x8, sp, #0x18 ~ 0001395c: f90007e8 str x8, [sp, #8] ~ 00013960: 52800029 mov w9, #0x1 // #1 ~ 00013964: b90013e9 str w9, [sp, #16] kvm_pgtable_hyp_map:391.30 (pgtable.c) Sbepe ret = hyp_map_set_prot_attr(║prot, &map_data); ~ 00013968: b85d43a0 ldur w0, [x29, #-44] kvm_pgtable_hyp_map:391.8 (pgtable.c) sbepe ret = ║hyp_map_set_prot_attr(prot, &map_data); ~ 0001396c: aa0803e1 mov x1, x8 ~ 00013970: 9400005a bl 13ad8 <hyp_map_set_prot_attr> kvm_pgtable_hyp_map:391.6 (pgtable.c) sbepe ret ║= hyp_map_set_prot_attr(prot, &map_data); ~ 00013974: b90033e0 str w0, [sp, #48] <- 00013970(bl-succ)<return> kvm_pgtable_hyp_map:392.6 (pgtable.c) Sbepe if (║ret) ~ 00013978: b94033e9 ldr w9, [sp, #48] kvm_pgtable_hyp_map:392.6 (pgtable.c) sbepe if (║ret) ~ ┌──0001397c: 340000a9 cbz w9, 13990 <kvm_pgtable_hyp_map+0x84> ~ │┌─00013980: 14000001 b 13984 <kvm_pgtable_hyp_map+0x78> <- 0001397c(b.cc-succ)<fallthrough> ││ ││ kvm_pgtable_hyp_map:393.10 (pgtable.c) Sbepe return ║ret; ~ │└>00013984: b94033e8 ldr w8, [sp, #48] <- 00013980(b)<kvm_pgtable_hyp_map+0x78> kvm_pgtable_hyp_map:393.3 (pgtable.c) sbepe ║return ret; ~ 00013988: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼──0001398c: 1400000c b 139bc <kvm_pgtable_hyp_map+0xb0> ││ ││ kvm_pgtable_hyp_map:395.25 (pgtable.c) Sbepe ret = kvm_pgtable_walk(║pgt, addr, size, &walker); ~ │└─>00013990: f85f03a0 ldur x0, [x29, #-16] <- 0001397c(b.cc)<kvm_pgtable_hyp_map+0x84> kvm_pgtable_hyp_map:395.30 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, ║addr, size, &walker); ~ 00013994: f85e83a1 ldur x1, [x29, #-24] kvm_pgtable_hyp_map:395.36 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, addr, ║size, &walker); ~ 00013998: f85e03a2 ldur x2, [x29, #-32] ~ 0001399c: 910003e3 mov x3, sp kvm_pgtable_hyp_map:395.8 (pgtable.c) sbepe ret = ║kvm_pgtable_walk(pgt, addr, size, &walker); ~ 000139a0: 97ffff76 bl 13778 <kvm_pgtable_walk> kvm_pgtable_hyp_map:395.6 (pgtable.c) sbepe ret ║= kvm_pgtable_walk(pgt, addr, size, &walker); ~ 000139a4: b90033e0 str w0, [sp, #48] <- 000139a0(bl-succ)<return> kvm_pgtable_hyp_map:396.2 (pgtable.c) Sbepe ║dsb(ishst); ~ 000139a8: d5033a9f dsb ishst kvm_pgtable_hyp_map:397.2 (pgtable.c) Sbepe ║isb(); ~ 000139ac: d5033fdf isb kvm_pgtable_hyp_map:398.9 (pgtable.c) Sbepe return ║ret; ~ 000139b0: b94033e8 ldr w8, [sp, #48] kvm_pgtable_hyp_map:398.2 (pgtable.c) sbepe ║return ret; ~ 000139b4: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─000139b8: 14000001 b 139bc <kvm_pgtable_hyp_map+0xb0> │ │ │ │ kvm_pgtable_hyp_map:399.1 (pgtable.c) Sbepe ║} ~ └>└>000139bc: b85fc3a0 ldur w0, [x29, #-4] <- 0001398c(b)<kvm_pgtable_hyp_map+0xb0>,000139b8(b)<kvm_pgtable_hyp_map+0xb0> ~ 000139c0: a9467bfd ldp x29, x30, [sp, #96] ~ 000139c4: 9101c3ff add sp, sp, #0x70 00013918 CFA:r29+16 r29:c-16 r30:c-8 ~ 000139c8: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x1390c 0x139cc (DW_OP_fbreg -0x10) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x18) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x20) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 -phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1390c 0x139cc (DW_OP_fbreg -0x28) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:377 -prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x1390c 0x139cc (DW_OP_fbreg -0x2c) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:378 -ret var int (base type, DW_ATE_signed size:4) 0x1390c 0x139cc (DW_OP_breg31 0x30) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:380 -map_data var struct hyp_map_data<d70f1>/<e7143> 0x1390c 0x139cc (DW_OP_breg31 0x18) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:381 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x1390c 0x139cc (DW_OP_breg31 0x0) kvm_pgtable_hyp_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:385 **000139cc <hyp_map_walker>: + hyp_map_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x139cc 0x13ad8 (DW_OP_fbreg -0x2c) +arg param const(pointer(no type)) 0x139cc 0x13ad8 (DW_OP_breg31 0x28) hyp_map_walker:358.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x10) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x18) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x1c) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x28) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x139cc 0x13ad8 (DW_OP_fbreg -0x2c) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:357 +arg param const(pointer(no type)) 0x139cc 0x13ad8 (DW_OP_breg31 0x28) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:357 +childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x139cc 0x13ad8 (DW_OP_breg31 0x20) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:359 +data var pointer(struct hyp_map_data<d70f1>/<e7143>) 0x139cc 0x13ad8 (DW_OP_breg31 0x18) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:360 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x139cc 0x13ad8 (DW_OP_breg31 0x10) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:361 ~ 000139cc: d101c3ff sub sp, sp, #0x70 ~ 000139d0: a9067bfd stp x29, x30, [sp, #96] 000139cc CFA:r31 r29:u r30:u ~ 000139d4: 910183fd add x29, sp, #0x60 ~ 000139d8: f81f03a0 stur x0, [x29, #-16] ~ 000139dc: f81e83a1 stur x1, [x29, #-24] ~ 000139e0: b81e43a2 stur w2, [x29, #-28] ~ 000139e4: f81d83a3 stur x3, [x29, #-40] ~ 000139e8: b81d43a4 stur w4, [x29, #-44] ~ 000139ec: f90017e5 str x5, [sp, #40] hyp_map_walker:360.30 (pgtable.c) SbePe struct hyp_map_data *data = ║arg; ~ 000139f0: f94017e8 ldr x8, [sp, #40] hyp_map_walker:360.23 (pgtable.c) sbepe struct hyp_map_data *║data = arg; ~ 000139f4: f9000fe8 str x8, [sp, #24] hyp_map_walker:361.38 (pgtable.c) Sbepe struct kvm_pgtable_mm_ops *mm_ops = ║data->mm_ops; ~ 000139f8: f9400fe8 ldr x8, [sp, #24] hyp_map_walker:361.44 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *mm_ops = data->║mm_ops; ~ 000139fc: f9400908 ldr x8, [x8, #16] hyp_map_walker:361.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = data->mm_ops; ~ 00013a00: f9000be8 str x8, [sp, #16] hyp_map_walker:363.30 (pgtable.c) Sbepe if (hyp_map_walker_try_leaf(║addr, end, level, ptep, arg)) ~ 00013a04: f85f03a0 ldur x0, [x29, #-16] hyp_map_walker:363.36 (pgtable.c) sbepe if (hyp_map_walker_try_leaf(addr, ║end, level, ptep, arg)) ~ 00013a08: f85e83a1 ldur x1, [x29, #-24] hyp_map_walker:363.41 (pgtable.c) sbepe if (hyp_map_walker_try_leaf(addr, end, ║level, ptep, arg)) ~ 00013a0c: b85e43a2 ldur w2, [x29, #-28] hyp_map_walker:363.48 (pgtable.c) sbepe if (hyp_map_walker_try_leaf(addr, end, level, ║ptep, arg)) ~ 00013a10: f85d83a3 ldur x3, [x29, #-40] hyp_map_walker:363.54 (pgtable.c) sbepe if (hyp_map_walker_try_leaf(addr, end, level, ptep, ║arg)) ~ 00013a14: f94017e4 ldr x4, [sp, #40] hyp_map_walker:363.6 (pgtable.c) sbepe if (║hyp_map_walker_try_leaf(addr, end, level, ptep, arg)) ~ 00013a18: 94000637 bl 152f4 <hyp_map_walker_try_leaf> hyp_map_walker:363.6 (pgtable.c) sbepe if (║hyp_map_walker_try_leaf(addr, end, level, ptep, arg)) ~ ┌──00013a1c: 360000a0 tbz w0, #0, 13a30 <hyp_map_walker+0x64> <- 00013a18(bl-succ)<return> ~ │┌─00013a20: 14000001 b 13a24 <hyp_map_walker+0x58> <- 00013a1c(b.cc-succ)<fallthrough> ││ ~ │└>00013a24: 2a1f03e8 mov w8, wzr <- 00013a20(b)<hyp_map_walker+0x58> hyp_map_walker:364.3 (pgtable.c) Sbepe ║return 0; ~ 00013a28: b81fc3a8 stur w8, [x29, #-4] ~ ┌────┼──00013a2c: 14000027 b 13ac8 <hyp_map_walker+0xfc> │ │ │ │ hyp_map_walker:366.6 (pgtable.c) Sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x13a30 0x13a6c (DW_OP_breg31 0xc) lexblock:hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:366 ~ │ └─>00013a30: b85e43a8 ldur w8, [x29, #-28] <- 00013a1c(b.cc)<hyp_map_walker+0x64> ~ 00013a34: 71000d08 subs w8, w8, #0x3 ~ 00013a38: 1a9f17e9 cset w9, eq // eq = none ~ 00013a3c: b9000fe9 str w9, [sp, #12] hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ 00013a40: b9400fe9 ldr w9, [sp, #12] hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ ┌───00013a44: 34000089 cbz w9, 13a54 <hyp_map_walker+0x88> │ │ ~ │ │ ┌─00013a48: 14000001 b 13a4c <hyp_map_walker+0x80> <- 00013a44(b.cc-succ)<fallthrough> │ │ │ │ │ │ hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ └>00013a4c: d4210000 brk #0x800 <- 00013a48(b)<hyp_map_walker+0x80> ~ │ │ ┌─00013a50: 14000001 b 13a54 <hyp_map_walker+0x88> │ │ │ │ │ │ hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ └>└>00013a54: b9400fe8 ldr w8, [sp, #12] <- 00013a44(b.cc)<hyp_map_walker+0x88>,00013a50(b)<hyp_map_walker+0x88> ~ 00013a58: 71000108 subs w8, w8, #0x0 ~ 00013a5c: 1a9f07e9 cset w9, ne // ne = any ~ 00013a60: 2a0903ea mov w10, w9 hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ 00013a64: f90003ea str x10, [sp] hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ 00013a68: f94003ea ldr x10, [sp] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x13a30 0x13a6c (DW_OP_breg31 0xc) lexblock:hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:366 hyp_map_walker:366.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ ┌──00013a6c: b40000aa cbz x10, 13a80 <hyp_map_walker+0xb4> │ │ ~ │ │┌─00013a70: 14000001 b 13a74 <hyp_map_walker+0xa8> <- 00013a6c(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00013a74: 128002a8 mov w8, #0xffffffea // #-22 <- 00013a70(b)<hyp_map_walker+0xa8> │ │ hyp_map_walker:367.3 (pgtable.c) Sbepe ║return -EINVAL; ~ │ │ 00013a78: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌──┼──00013a7c: 14000013 b 13ac8 <hyp_map_walker+0xfc> │ │ │ │ │ │ hyp_map_walker:369.24 (pgtable.c) Sbepe childp = (kvm_pte_t *)║mm_ops->zalloc_page(NULL); ~ │ │ └─>00013a80: f9400be8 ldr x8, [sp, #16] <- 00013a6c(b.cc)<hyp_map_walker+0xb4> │ │ hyp_map_walker:369.32 (pgtable.c) sbepe childp = (kvm_pte_t *)mm_ops->║zalloc_page(NULL); ~ │ │ 00013a84: f9400108 ldr x8, [x8] ~ │ │ 00013a88: aa1f03e0 mov x0, xzr │ │ hyp_map_walker:369.24 (pgtable.c) sbepe childp = (kvm_pte_t *)║mm_ops->zalloc_page(NULL); ~ │ │ 00013a8c: d63f0100 blr x8 │ │ hyp_map_walker:369.9 (pgtable.c) sbepe childp ║= (kvm_pte_t *)mm_ops->zalloc_page(NULL); ~ │ │ 00013a90: f90013e0 str x0, [sp, #32] │ │ hyp_map_walker:370.7 (pgtable.c) Sbepe if (!║childp) ~ │ │ 00013a94: f94013e8 ldr x8, [sp, #32] │ │ hyp_map_walker:370.6 (pgtable.c) sbepe if (║!childp) ~ │ │ ┌──00013a98: b50000a8 cbnz x8, 13aac <hyp_map_walker+0xe0> │ │ │ ~ │ │ │┌─00013a9c: 14000001 b 13aa0 <hyp_map_walker+0xd4> <- 00013a98(b.cc-succ)<fallthrough> │ │ ││ ~ │ │ │└>00013aa0: 12800168 mov w8, #0xfffffff4 // #-12 <- 00013a9c(b)<hyp_map_walker+0xd4> │ │ │ hyp_map_walker:371.3 (pgtable.c) Sbepe ║return -ENOMEM; ~ │ │ │ 00013aa4: b81fc3a8 stur w8, [x29, #-4] ~ │ │ ┌┼──00013aa8: 14000008 b 13ac8 <hyp_map_walker+0xfc> │ │ ││ │ │ ││ hyp_map_walker:373.20 (pgtable.c) Sbepe kvm_set_table_pte(║ptep, childp, mm_ops); ~ │ │ │└─>00013aac: f85d83a0 ldur x0, [x29, #-40] <- 00013a98(b.cc)<hyp_map_walker+0xe0> │ │ │ hyp_map_walker:373.26 (pgtable.c) sbepe kvm_set_table_pte(ptep, ║childp, mm_ops); ~ │ │ │ 00013ab0: f94013e1 ldr x1, [sp, #32] │ │ │ hyp_map_walker:373.34 (pgtable.c) sbepe kvm_set_table_pte(ptep, childp, ║mm_ops); ~ │ │ │ 00013ab4: f9400be2 ldr x2, [sp, #16] │ │ │ hyp_map_walker:373.2 (pgtable.c) sbepe ║kvm_set_table_pte(ptep, childp, mm_ops); ~ │ │ │ 00013ab8: 94000646 bl 153d0 <kvm_set_table_pte> │ │ │ ~ │ │ │ 00013abc: 2a1f03e8 mov w8, wzr <- 00013ab8(bl-succ)<return> │ │ │ hyp_map_walker:374.2 (pgtable.c) Sbepe ║return 0; ~ │ │ │ 00013ac0: b81fc3a8 stur w8, [x29, #-4] ~ │ │ │ ┌─00013ac4: 14000001 b 13ac8 <hyp_map_walker+0xfc> │ │ │ │ │ │ │ │ hyp_map_walker:375.1 (pgtable.c) Sbepe ║} ~ └>└>└>└>00013ac8: b85fc3a0 ldur w0, [x29, #-4] <- 00013a2c(b)<hyp_map_walker+0xfc>,00013a7c(b)<hyp_map_walker+0xfc>,00013aa8(b)<hyp_map_walker+0xfc>,00013ac4(b)<hyp_map_walker+0xfc> ~ 00013acc: a9467bfd ldp x29, x30, [sp, #96] ~ 00013ad0: 9101c3ff add sp, sp, #0x70 000139d8 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013ad4: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x10) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x18) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x1c) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x139cc 0x13ad8 (DW_OP_fbreg -0x28) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:356 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x139cc 0x13ad8 (DW_OP_fbreg -0x2c) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:357 -arg param const(pointer(no type)) 0x139cc 0x13ad8 (DW_OP_breg31 0x28) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:357 -childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x139cc 0x13ad8 (DW_OP_breg31 0x20) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:359 -data var pointer(struct hyp_map_data<d70f1>/<e7143>) 0x139cc 0x13ad8 (DW_OP_breg31 0x18) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:360 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x139cc 0x13ad8 (DW_OP_breg31 0x10) hyp_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:361 **00013ad8 <hyp_map_set_prot_attr>: + hyp_map_set_prot_attr params: +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13ad8 0x13c94 (DW_OP_fbreg 0x38) +data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x13ad8 0x13c94 (DW_OP_fbreg 0x30) hyp_map_set_prot_attr:315.0 (pgtable.c) Sbepe ║{ 00013ad8 CFA:r31 +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13ad8 0x13c94 (DW_OP_fbreg 0x38) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:313 +data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x13ad8 0x13c94 (DW_OP_fbreg 0x30) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:314 +device var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x13ad8 0x13c94 (DW_OP_fbreg 0x2c) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:316 +mtype var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x28) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:317 +attr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x20) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:318 +sh var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x14) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:319 +ap var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x10) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:320 ~ 00013ad8: d10103ff sub sp, sp, #0x40 <- 00013970(bl)<hyp_map_set_prot_attr> ~ 00013adc: b9003be0 str w0, [sp, #56] ~ 00013ae0: f9001be1 str x1, [sp, #48] hyp_map_set_prot_attr:316.16 (pgtable.c) SbePe bool device = ║prot & KVM_PGTABLE_PROT_DEVICE; ~ 00013ae4: b9403be8 ldr w8, [sp, #56] ~ 00013ae8: 53030d08 ubfx w8, w8, #3, #1 hyp_map_set_prot_attr:316.7 (pgtable.c) sbepe bool ║device = prot & KVM_PGTABLE_PROT_DEVICE; ~ 00013aec: 3900b3e8 strb w8, [sp, #44] hyp_map_set_prot_attr:317.14 (pgtable.c) Sbepe u32 mtype = ║device ? MT_DEVICE_nGnRE : MT_NORMAL; ~ 00013af0: 3940b3e8 ldrb w8, [sp, #44] ~ 00013af4: 72000108 ands w8, w8, #0x1 ~ 00013af8: 2a1f03e9 mov w9, wzr ~ 00013afc: 528000aa mov w10, #0x5 // #5 ~ 00013b00: 1a891149 csel w9, w10, w9, ne // ne = any hyp_map_set_prot_attr:317.6 (pgtable.c) sbepe u32 ║mtype = device ? MT_DEVICE_nGnRE : MT_NORMAL; ~ 00013b04: b9002be9 str w9, [sp, #40] hyp_map_set_prot_attr:318.19 (pgtable.c) Sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─00013b08: 14000001 b 13b0c <hyp_map_set_prot_attr+0x34> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└>00013b0c: 14000001 b 13b10 <hyp_map_set_prot_attr+0x38> <- 00013b08(b)<hyp_map_set_prot_attr+0x34> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└──>00013b10: 14000001 b 13b14 <hyp_map_set_prot_attr+0x3c> <- 00013b0c(b)<hyp_map_set_prot_attr+0x38> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└────>00013b14: 14000001 b 13b18 <hyp_map_set_prot_attr+0x40> <- 00013b10(b)<hyp_map_set_prot_attr+0x3c> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└──────>00013b18: 14000001 b 13b1c <hyp_map_set_prot_attr+0x44> <- 00013b14(b)<hyp_map_set_prot_attr+0x40> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└────────>00013b1c: 14000001 b 13b20 <hyp_map_set_prot_attr+0x48> <- 00013b18(b)<hyp_map_set_prot_attr+0x44> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└──────────>00013b20: 14000001 b 13b24 <hyp_map_set_prot_attr+0x4c> <- 00013b1c(b)<hyp_map_set_prot_attr+0x48> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└────────────>00013b24: 14000001 b 13b28 <hyp_map_set_prot_attr+0x50> <- 00013b20(b)<hyp_map_set_prot_attr+0x4c> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└──────────────>00013b28: 14000001 b 13b2c <hyp_map_set_prot_attr+0x54> <- 00013b24(b)<hyp_map_set_prot_attr+0x50> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ ┌─└────────────────>00013b2c: 14000001 b 13b30 <hyp_map_set_prot_attr+0x58> <- 00013b28(b)<hyp_map_set_prot_attr+0x54> hyp_map_set_prot_attr:318.19 (pgtable.c) sbepe kvm_pte_t attr = ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ └──────────────────>00013b30: b9402be8 ldr w8, [sp, #40] <- 00013b2c(b)<hyp_map_set_prot_attr+0x58> ~ 00013b34: 531e7508 lsl w8, w8, #2 ~ 00013b38: 2a0803e0 mov w0, w8 ~ 00013b3c: 927e0809 and x9, x0, #0x1c ~ 00013b40: f9000fe9 str x9, [sp, #24] ~ 00013b44: f9400fe9 ldr x9, [sp, #24] hyp_map_set_prot_attr:318.12 (pgtable.c) sbepe kvm_pte_t ║attr = FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX, mtype); ~ 00013b48: f90013e9 str x9, [sp, #32] ~ 00013b4c: 52800068 mov w8, #0x3 // #3 hyp_map_set_prot_attr:319.6 (pgtable.c) Sbepe u32 ║sh = KVM_PTE_LEAF_ATTR_LO_S1_SH_IS; ~ 00013b50: b90017e8 str w8, [sp, #20] hyp_map_set_prot_attr:320.12 (pgtable.c) Sbepe u32 ap = (║prot & KVM_PGTABLE_PROT_W) ? KVM_PTE_LEAF_ATTR_LO_S1_AP_RW : ~ 00013b54: b9403bea ldr w10, [sp, #56] hyp_map_set_prot_attr:320.11 (pgtable.c) sbepe u32 ap = ║(prot & KVM_PGTABLE_PROT_W) ? KVM_PTE_LEAF_ATTR_LO_S1_AP_RW : ~ 00013b58: 721f014a ands w10, w10, #0x2 ~ 00013b5c: 1a9f0508 csinc w8, w8, wzr, eq // eq = none hyp_map_set_prot_attr:320.6 (pgtable.c) sbepe u32 ║ap = (prot & KVM_PGTABLE_PROT_W) ? KVM_PTE_LEAF_ATTR_LO_S1_AP_RW : ~ 00013b60: b90013e8 str w8, [sp, #16] hyp_map_set_prot_attr:323.6 (pgtable.c) Sbepe if (║!(prot & KVM_PGTABLE_PROT_R)) ~ 00013b64: 3940e3e8 ldrb w8, [sp, #56] ~ ┌──00013b68: 371000a8 tbnz w8, #2, 13b7c <hyp_map_set_prot_attr+0xa4> ~ │┌─00013b6c: 14000001 b 13b70 <hyp_map_set_prot_attr+0x98> <- 00013b68(b.cc-succ)<fallthrough> ││ ~ │└>00013b70: 128002a8 mov w8, #0xffffffea // #-22 <- 00013b6c(b)<hyp_map_set_prot_attr+0x98> hyp_map_set_prot_attr:324.3 (pgtable.c) Sbepe ║return -EINVAL; ~ 00013b74: b9003fe8 str w8, [sp, #60] ~ ┌───────┼──00013b78: 14000044 b 13c88 <hyp_map_set_prot_attr+0x1b0> │ │ │ │ hyp_map_set_prot_attr:326.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_X) { ~ │ └─>00013b7c: 3940e3e8 ldrb w8, [sp, #56] <- 00013b68(b.cc)<hyp_map_set_prot_attr+0xa4> ~ │ ┌───00013b80: 360001e8 tbz w8, #0, 13bbc <hyp_map_set_prot_attr+0xe4> │ │ ~ │ │ ┌─00013b84: 14000001 b 13b88 <hyp_map_set_prot_attr+0xb0> <- 00013b80(b.cc-succ)<fallthrough> │ │ │ │ │ │ hyp_map_set_prot_attr:327.7 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_W) ~ │ │ └>00013b88: 3940e3e8 ldrb w8, [sp, #56] <- 00013b84(b)<hyp_map_set_prot_attr+0xb0> ~ │ │┌──00013b8c: 360800a8 tbz w8, #1, 13ba0 <hyp_map_set_prot_attr+0xc8> │ ││ ~ │ ││┌─00013b90: 14000001 b 13b94 <hyp_map_set_prot_attr+0xbc> <- 00013b8c(b.cc-succ)<fallthrough> │ │││ ~ │ ││└>00013b94: 128002a8 mov w8, #0xffffffea // #-22 <- 00013b90(b)<hyp_map_set_prot_attr+0xbc> │ ││ hyp_map_set_prot_attr:328.4 (pgtable.c) Sbepe ║return -EINVAL; ~ │ ││ 00013b98: b9003fe8 str w8, [sp, #60] ~ │ ┌────┼┼──00013b9c: 1400003b b 13c88 <hyp_map_set_prot_attr+0x1b0> │ │ ││ │ │ ││ hyp_map_set_prot_attr:330.7 (pgtable.c) Sbepe if (║device) ~ │ │ │└─>00013ba0: 3940b3e8 ldrb w8, [sp, #44] <- 00013b8c(b.cc)<hyp_map_set_prot_attr+0xc8> │ │ │ hyp_map_set_prot_attr:330.7 (pgtable.c) sbepe if (║device) ~ │ │ │┌──00013ba4: 360000a8 tbz w8, #0, 13bb8 <hyp_map_set_prot_attr+0xe0> │ │ ││ ~ │ │ ││┌─00013ba8: 14000001 b 13bac <hyp_map_set_prot_attr+0xd4> <- 00013ba4(b.cc-succ)<fallthrough> │ │ │││ ~ │ │ ││└>00013bac: 128002a8 mov w8, #0xffffffea // #-22 <- 00013ba8(b)<hyp_map_set_prot_attr+0xd4> │ │ ││ hyp_map_set_prot_attr:331.4 (pgtable.c) Sbepe ║return -EINVAL; ~ │ │ ││ 00013bb0: b9003fe8 str w8, [sp, #60] ~ │ │ ┌──┼┼──00013bb4: 14000035 b 13c88 <hyp_map_set_prot_attr+0x1b0> │ │ │ ││ │ │ │ ││ hyp_map_set_prot_attr:332.2 (pgtable.c) Sbepe ║} else { ~ │ │ │┌─┼└─>00013bb8: 14000005 b 13bcc <hyp_map_set_prot_attr+0xf4> <- 00013ba4(b.cc)<hyp_map_set_prot_attr+0xe0> │ │ ││ │ │ │ ││ │ hyp_map_set_prot_attr:333.8 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_HI_S1_XN; ~ │ │ ││ └──>00013bbc: f94013e8 ldr x8, [sp, #32] <- 00013b80(b.cc)<hyp_map_set_prot_attr+0xe4> ~ │ │ ││ 00013bc0: b24a0108 orr x8, x8, #0x40000000000000 ~ │ │ ││ 00013bc4: f90013e8 str x8, [sp, #32] ~ │ │ ││ ┌─00013bc8: 14000001 b 13bcc <hyp_map_set_prot_attr+0xf4> │ │ ││ │ │ │ ││ │ hyp_map_set_prot_attr:336.10 (pgtable.c) Sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ │ │ │└>┌─└>00013bcc: 14000001 b 13bd0 <hyp_map_set_prot_attr+0xf8> <- 00013bb8(b)<hyp_map_set_prot_attr+0xf4>,00013bc8(b)<hyp_map_set_prot_attr+0xf4> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ │ │ │┌─└──>00013bd0: 14000001 b 13bd4 <hyp_map_set_prot_attr+0xfc> <- 00013bcc(b)<hyp_map_set_prot_attr+0xf8> │ │ ││ │ │ ││ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ │ │┌┼└────>00013bd4: 14000001 b 13bd8 <hyp_map_set_prot_attr+0x100> <- 00013bd0(b)<hyp_map_set_prot_attr+0xfc> │ │││ │ │││ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ │┌┼└┼─────>00013bd8: 14000001 b 13bdc <hyp_map_set_prot_attr+0x104> <- 00013bd4(b)<hyp_map_set_prot_attr+0x100> │││ │ │││ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌┼└┼─┼─────>00013bdc: 14000001 b 13be0 <hyp_map_set_prot_attr+0x108> <- 00013bd8(b)<hyp_map_set_prot_attr+0x104> ││ │ │ ││ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌─└┼─┼─┼─────>00013be0: 14000001 b 13be4 <hyp_map_set_prot_attr+0x10c> <- 00013bdc(b)<hyp_map_set_prot_attr+0x108> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌─└──┼─┼─┼─────>00013be4: 14000001 b 13be8 <hyp_map_set_prot_attr+0x110> <- 00013be0(b)<hyp_map_set_prot_attr+0x10c> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌─└────┼─┼─┼─────>00013be8: 14000001 b 13bec <hyp_map_set_prot_attr+0x114> <- 00013be4(b)<hyp_map_set_prot_attr+0x110> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌─└──────┼─┼─┼─────>00013bec: 14000001 b 13bf0 <hyp_map_set_prot_attr+0x118> <- 00013be8(b)<hyp_map_set_prot_attr+0x114> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ ┌─└────────┼─┼─┼─────>00013bf0: 14000001 b 13bf4 <hyp_map_set_prot_attr+0x11c> <- 00013bec(b)<hyp_map_set_prot_attr+0x118> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:336.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ └──────────┼─┼─┼─────>00013bf4: b94013e8 ldr w8, [sp, #16] <- 00013bf0(b)<hyp_map_set_prot_attr+0x11c> ~ │ │ │ 00013bf8: 531a6508 lsl w8, w8, #6 ~ │ │ │ 00013bfc: 2a0803e0 mov w0, w8 ~ │ │ │ 00013c00: 927a0409 and x9, x0, #0xc0 ~ │ │ │ 00013c04: f90007e9 str x9, [sp, #8] ~ │ │ │ 00013c08: f94007e9 ldr x9, [sp, #8] │ │ │ hyp_map_set_prot_attr:336.7 (pgtable.c) sbepe attr ║|= FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_AP, ap); ~ │ │ │ 00013c0c: f94013ea ldr x10, [sp, #32] ~ │ │ │ 00013c10: aa090149 orr x9, x10, x9 ~ │ │ │ 00013c14: f90013e9 str x9, [sp, #32] │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) Sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │ │ │ ┌─00013c18: 14000001 b 13c1c <hyp_map_set_prot_attr+0x144> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │ │ │ ┌─└>00013c1c: 14000001 b 13c20 <hyp_map_set_prot_attr+0x148> <- 00013c18(b)<hyp_map_set_prot_attr+0x144> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │ │ │┌─└──>00013c20: 14000001 b 13c24 <hyp_map_set_prot_attr+0x14c> <- 00013c1c(b)<hyp_map_set_prot_attr+0x148> │ │ ││ │ │ ││ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │ │┌┼└────>00013c24: 14000001 b 13c28 <hyp_map_set_prot_attr+0x150> <- 00013c20(b)<hyp_map_set_prot_attr+0x14c> │ │││ │ │││ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │┌┼└┼─────>00013c28: 14000001 b 13c2c <hyp_map_set_prot_attr+0x154> <- 00013c24(b)<hyp_map_set_prot_attr+0x150> │││ │ │││ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ ┌┼└┼─┼─────>00013c2c: 14000001 b 13c30 <hyp_map_set_prot_attr+0x158> <- 00013c28(b)<hyp_map_set_prot_attr+0x154> ││ │ │ ││ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ ┌─└┼─┼─┼─────>00013c30: 14000001 b 13c34 <hyp_map_set_prot_attr+0x15c> <- 00013c2c(b)<hyp_map_set_prot_attr+0x158> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ ┌─└──┼─┼─┼─────>00013c34: 14000001 b 13c38 <hyp_map_set_prot_attr+0x160> <- 00013c30(b)<hyp_map_set_prot_attr+0x15c> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ ┌─└────┼─┼─┼─────>00013c38: 14000001 b 13c3c <hyp_map_set_prot_attr+0x164> <- 00013c34(b)<hyp_map_set_prot_attr+0x160> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ ┌─└──────┼─┼─┼─────>00013c3c: 14000001 b 13c40 <hyp_map_set_prot_attr+0x168> <- 00013c38(b)<hyp_map_set_prot_attr+0x164> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:337.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ └────────┼─┼─┼─────>00013c40: b94017e8 ldr w8, [sp, #20] <- 00013c3c(b)<hyp_map_set_prot_attr+0x168> ~ │ │ │ 00013c44: 53185d08 lsl w8, w8, #8 ~ │ │ │ 00013c48: 2a0803e0 mov w0, w8 ~ │ │ │ 00013c4c: 92780409 and x9, x0, #0x300 ~ │ │ │ 00013c50: f90003e9 str x9, [sp] ~ │ │ │ 00013c54: f94003e9 ldr x9, [sp] │ │ │ hyp_map_set_prot_attr:337.7 (pgtable.c) sbepe attr ║|= FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S1_SH, sh); ~ │ │ │ 00013c58: f94013ea ldr x10, [sp, #32] ~ │ │ │ 00013c5c: aa090149 orr x9, x10, x9 ~ │ │ │ 00013c60: f90013e9 str x9, [sp, #32] │ │ │ hyp_map_set_prot_attr:338.7 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_LO_S1_AF; ~ │ │ │ 00013c64: f94013e9 ldr x9, [sp, #32] ~ │ │ │ 00013c68: b2760129 orr x9, x9, #0x400 ~ │ │ │ 00013c6c: f90013e9 str x9, [sp, #32] │ │ │ hyp_map_set_prot_attr:339.15 (pgtable.c) Sbepe data->attr = ║attr; ~ │ │ │ 00013c70: f94013e9 ldr x9, [sp, #32] │ │ │ hyp_map_set_prot_attr:339.2 (pgtable.c) sbepe ║data->attr = attr; ~ │ │ │ 00013c74: f9401bea ldr x10, [sp, #48] │ │ │ hyp_map_set_prot_attr:339.13 (pgtable.c) sbepe data->attr ║= attr; ~ │ │ │ 00013c78: f9000549 str x9, [x10, #8] ~ │ │ │ 00013c7c: 2a1f03e8 mov w8, wzr │ │ │ hyp_map_set_prot_attr:340.2 (pgtable.c) Sbepe ║return 0; ~ │ │ │ 00013c80: b9003fe8 str w8, [sp, #60] ~ │ │ │ ┌─00013c84: 14000001 b 13c88 <hyp_map_set_prot_attr+0x1b0> │ │ │ │ │ │ │ │ hyp_map_set_prot_attr:341.1 (pgtable.c) Sbepe ║} ~ └>└>└───>└>00013c88: b9403fe0 ldr w0, [sp, #60] <- 00013b78(b)<hyp_map_set_prot_attr+0x1b0>,00013b9c(b)<hyp_map_set_prot_attr+0x1b0>,00013bb4(b)<hyp_map_set_prot_attr+0x1b0>,00013c84(b)<hyp_map_set_prot_attr+0x1b0> ~ 00013c8c: 910103ff add sp, sp, #0x40 00013adc CFA:r31+64 ~ 00013c90: d65f03c0 ret -prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13ad8 0x13c94 (DW_OP_fbreg 0x38) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:313 -data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x13ad8 0x13c94 (DW_OP_fbreg 0x30) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:314 -device var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x13ad8 0x13c94 (DW_OP_fbreg 0x2c) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:316 -mtype var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x28) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:317 -attr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x20) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:318 -sh var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x14) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:319 -ap var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13ad8 0x13c94 (DW_OP_fbreg 0x10) hyp_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:320 **00013c94 <kvm_pgtable_hyp_init>: + kvm_pgtable_hyp_init params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13c94 0x13d54 (DW_OP_fbreg -0x10) +va_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13c94 0x13d54 (DW_OP_fbreg -0x14) +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x13c94 0x13d54 (DW_OP_breg31 0x10) kvm_pgtable_hyp_init:403.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13c94 0x13d54 (DW_OP_fbreg -0x10) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:401 +va_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13c94 0x13d54 (DW_OP_fbreg -0x14) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:401 +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x13c94 0x13d54 (DW_OP_breg31 0x10) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:402 +levels var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13c94 0x13d54 (DW_OP_breg31 0x8) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:404 ~ 00013c94: d10103ff sub sp, sp, #0x40 <- 00009f84(bl)<kvm_pgtable_hyp_init> ~ 00013c98: a9037bfd stp x29, x30, [sp, #48] 00013c94 CFA:r31 r29:u r30:u ~ 00013c9c: 9100c3fd add x29, sp, #0x30 ~ 00013ca0: f81f03a0 stur x0, [x29, #-16] ~ 00013ca4: b81ec3a1 stur w1, [x29, #-20] ~ 00013ca8: f9000be2 str x2, [sp, #16] kvm_pgtable_hyp_init:404.15 (pgtable.c) SbePe u64 levels = ║ARM64_HW_PGTABLE_LEVELS(va_bits); ~ 00013cac: b85ec3a8 ldur w8, [x29, #-20] ~ 00013cb0: 71001108 subs w8, w8, #0x4 ~ 00013cb4: 5291c729 mov w9, #0x8e39 // #36409 ~ 00013cb8: 72a71c69 movk w9, #0x38e3, lsl #16 ~ 00013cbc: 9ba97d0a umull x10, w8, w9 ~ 00013cc0: d361fd4a lsr x10, x10, #33 kvm_pgtable_hyp_init:404.6 (pgtable.c) sbepe u64 ║levels = ARM64_HW_PGTABLE_LEVELS(va_bits); ~ 00013cc4: f90007ea str x10, [sp, #8] kvm_pgtable_hyp_init:406.26 (pgtable.c) Sbepe pgt->pgd = (kvm_pte_t *)║mm_ops->zalloc_page(NULL); ~ 00013cc8: f9400bea ldr x10, [sp, #16] kvm_pgtable_hyp_init:406.34 (pgtable.c) sbepe pgt->pgd = (kvm_pte_t *)mm_ops->║zalloc_page(NULL); ~ 00013ccc: f940014a ldr x10, [x10] ~ 00013cd0: aa1f03e0 mov x0, xzr kvm_pgtable_hyp_init:406.26 (pgtable.c) sbepe pgt->pgd = (kvm_pte_t *)║mm_ops->zalloc_page(NULL); ~ 00013cd4: d63f0140 blr x10 kvm_pgtable_hyp_init:406.2 (pgtable.c) sbepe ║pgt->pgd = (kvm_pte_t *)mm_ops->zalloc_page(NULL); ~ 00013cd8: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_hyp_init:406.11 (pgtable.c) sbepe pgt->pgd ║= (kvm_pte_t *)mm_ops->zalloc_page(NULL); ~ 00013cdc: f9000540 str x0, [x10, #8] kvm_pgtable_hyp_init:407.7 (pgtable.c) Sbepe if (!║pgt->pgd) ~ 00013ce0: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_hyp_init:407.12 (pgtable.c) sbepe if (!pgt->║pgd) ~ 00013ce4: f940054a ldr x10, [x10, #8] kvm_pgtable_hyp_init:407.6 (pgtable.c) sbepe if (║!pgt->pgd) ~ ┌──00013ce8: b50000aa cbnz x10, 13cfc <kvm_pgtable_hyp_init+0x68> ~ │┌─00013cec: 14000001 b 13cf0 <kvm_pgtable_hyp_init+0x5c> <- 00013ce8(b.cc-succ)<fallthrough> ││ ~ │└>00013cf0: 12800168 mov w8, #0xfffffff4 // #-12 <- 00013cec(b)<kvm_pgtable_hyp_init+0x5c> kvm_pgtable_hyp_init:408.3 (pgtable.c) Sbepe ║return -ENOMEM; ~ 00013cf4: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼──00013cf8: 14000013 b 13d44 <kvm_pgtable_hyp_init+0xb0> ││ ││ kvm_pgtable_hyp_init:410.18 (pgtable.c) Sbepe pgt->ia_bits = ║va_bits; ~ │└─>00013cfc: b85ec3a8 ldur w8, [x29, #-20] <- 00013ce8(b.cc)<kvm_pgtable_hyp_init+0x68> kvm_pgtable_hyp_init:410.2 (pgtable.c) sbepe ║pgt->ia_bits = va_bits; ~ 00013d00: f85f03a9 ldur x9, [x29, #-16] kvm_pgtable_hyp_init:410.16 (pgtable.c) sbepe pgt->ia_bits ║= va_bits; ~ 00013d04: b9000128 str w8, [x9] kvm_pgtable_hyp_init:411.46 (pgtable.c) Sbepe pgt->start_level = KVM_PGTABLE_MAX_LEVELS - ║levels; ~ 00013d08: b9400be8 ldr w8, [sp, #8] ~ 00013d0c: 5280008a mov w10, #0x4 // #4 kvm_pgtable_hyp_init:411.44 (pgtable.c) sbepe pgt->start_level = KVM_PGTABLE_MAX_LEVELS ║- levels; ~ 00013d10: 6b080148 subs w8, w10, w8 ~ 00013d14: 2a0803e0 mov w0, w8 kvm_pgtable_hyp_init:411.2 (pgtable.c) sbepe ║pgt->start_level = KVM_PGTABLE_MAX_LEVELS - levels; ~ 00013d18: f85f03a9 ldur x9, [x29, #-16] kvm_pgtable_hyp_init:411.19 (pgtable.c) sbepe pgt->start_level ║= KVM_PGTABLE_MAX_LEVELS - levels; ~ 00013d1c: b9000520 str w0, [x9, #4] kvm_pgtable_hyp_init:412.17 (pgtable.c) Sbepe pgt->mm_ops = ║mm_ops; ~ 00013d20: f9400be9 ldr x9, [sp, #16] kvm_pgtable_hyp_init:412.2 (pgtable.c) sbepe ║pgt->mm_ops = mm_ops; ~ 00013d24: f85f03ab ldur x11, [x29, #-16] kvm_pgtable_hyp_init:412.15 (pgtable.c) sbepe pgt->mm_ops ║= mm_ops; ~ 00013d28: f9000969 str x9, [x11, #16] kvm_pgtable_hyp_init:413.2 (pgtable.c) Sbepe ║pgt->mmu = NULL; ~ 00013d2c: f85f03a9 ldur x9, [x29, #-16] ~ 00013d30: aa1f03eb mov x11, xzr kvm_pgtable_hyp_init:413.12 (pgtable.c) sbepe pgt->mmu ║= NULL; ~ 00013d34: f9000d2b str x11, [x9, #24] ~ 00013d38: 2a1f03e8 mov w8, wzr kvm_pgtable_hyp_init:414.2 (pgtable.c) Sbepe ║return 0; ~ 00013d3c: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00013d40: 14000001 b 13d44 <kvm_pgtable_hyp_init+0xb0> │ │ │ │ kvm_pgtable_hyp_init:415.1 (pgtable.c) Sbepe ║} ~ └>└>00013d44: b85fc3a0 ldur w0, [x29, #-4] <- 00013cf8(b)<kvm_pgtable_hyp_init+0xb0>,00013d40(b)<kvm_pgtable_hyp_init+0xb0> ~ 00013d48: a9437bfd ldp x29, x30, [sp, #48] ~ 00013d4c: 910103ff add sp, sp, #0x40 00013ca0 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013d50: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13c94 0x13d54 (DW_OP_fbreg -0x10) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:401 -va_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13c94 0x13d54 (DW_OP_fbreg -0x14) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:401 -mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x13c94 0x13d54 (DW_OP_breg31 0x10) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:402 -levels var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13c94 0x13d54 (DW_OP_breg31 0x8) kvm_pgtable_hyp_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:404 **00013d54 <kvm_pgtable_hyp_destroy>: + kvm_pgtable_hyp_destroy params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13d54 0x13e18 (DW_OP_fbreg -0x8) kvm_pgtable_hyp_destroy:427.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13d54 0x13e18 (DW_OP_fbreg -0x8) kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:426 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x13d54 0x13e18 (DW_OP_breg31 0x20) kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:428 ~ 00013d54: d10143ff sub sp, sp, #0x50 ~ 00013d58: a9047bfd stp x29, x30, [sp, #64] 00013d54 CFA:r31 r29:u r30:u ~ 00013d5c: 910103fd add x29, sp, #0x40 ~ 00013d60: f81f83a0 stur x0, [x29, #-8] kvm_pgtable_hyp_destroy:428.37 (pgtable.c) SbePe struct kvm_pgtable_walker walker = { ~ 00013d64: 90000008 adrp x8, 13000 <host_spsr_to_spsr32+0x3c> ~ 00013d68: 91386108 add x8, x8, #0xe18 ~ 00013d6c: f90013e8 str x8, [sp, #32] kvm_pgtable_hyp_destroy:431.10 (pgtable.c) Sbepe .arg = ║pgt->mm_ops, ~ 00013d70: f85f83a8 ldur x8, [x29, #-8] kvm_pgtable_hyp_destroy:431.15 (pgtable.c) sbepe .arg = pgt->║mm_ops, ~ 00013d74: f9400908 ldr x8, [x8, #16] kvm_pgtable_hyp_destroy:428.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 00013d78: f90017e8 str x8, [sp, #40] ~ 00013d7c: 52800089 mov w9, #0x4 // #4 ~ 00013d80: b90033e9 str w9, [sp, #48] kvm_pgtable_hyp_destroy:434.2 (pgtable.c) Sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x13d84 0x13de8 (DW_OP_breg31 0x1c) lexblock:kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:434 ~ 00013d84: f85f83a8 ldur x8, [x29, #-8] ~ 00013d88: b9400109 ldr w9, [x8] ~ 00013d8c: 2a0903ea mov w10, w9 ~ 00013d90: 52800029 mov w9, #0x1 // #1 ~ 00013d94: 2a0903eb mov w11, w9 ~ 00013d98: 9aca2162 lsl x2, x11, x10 ~ 00013d9c: aa1f03e0 mov x0, xzr ~ 00013da0: 910083e3 add x3, sp, #0x20 ~ 00013da4: f90007e0 str x0, [sp, #8] ~ 00013da8: aa0803e0 mov x0, x8 ~ 00013dac: f94007e1 ldr x1, [sp, #8] ~ 00013db0: 97fffe72 bl 13778 <kvm_pgtable_walk> ~ 00013db4: 71000009 subs w9, w0, #0x0 <- 00013db0(bl-succ)<return> ~ 00013db8: 1a9f07ec cset w12, ne // ne = any ~ 00013dbc: b9001fec str w12, [sp, #28] kvm_pgtable_hyp_destroy:434.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ 00013dc0: b9401fec ldr w12, [sp, #28] kvm_pgtable_hyp_destroy:434.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ ┌───00013dc4: 3400008c cbz w12, 13dd4 <kvm_pgtable_hyp_destroy+0x80> ~ │ ┌─00013dc8: 14000001 b 13dcc <kvm_pgtable_hyp_destroy+0x78> <- 00013dc4(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_hyp_destroy:434.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ │ └>00013dcc: d4210000 brk #0x800 <- 00013dc8(b)<kvm_pgtable_hyp_destroy+0x78> ~ │ ┌─00013dd0: 14000001 b 13dd4 <kvm_pgtable_hyp_destroy+0x80> │ │ │ │ kvm_pgtable_hyp_destroy:434.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ └>└>00013dd4: b9401fe8 ldr w8, [sp, #28] <- 00013dc4(b.cc)<kvm_pgtable_hyp_destroy+0x80>,00013dd0(b)<kvm_pgtable_hyp_destroy+0x80> ~ 00013dd8: 71000108 subs w8, w8, #0x0 ~ 00013ddc: 1a9f07e9 cset w9, ne // ne = any ~ 00013de0: 2a0903ea mov w10, w9 kvm_pgtable_hyp_destroy:434.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ 00013de4: f9000bea str x10, [sp, #16] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x13d84 0x13de8 (DW_OP_breg31 0x1c) lexblock:kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:434 kvm_pgtable_hyp_destroy:435.2 (pgtable.c) Sbepe ║pgt->mm_ops->put_page(pgt->pgd); ~ 00013de8: f85f83aa ldur x10, [x29, #-8] kvm_pgtable_hyp_destroy:435.7 (pgtable.c) sbepe pgt->║mm_ops->put_page(pgt->pgd); ~ 00013dec: f940094b ldr x11, [x10, #16] kvm_pgtable_hyp_destroy:435.15 (pgtable.c) sbepe pgt->mm_ops->║put_page(pgt->pgd); ~ 00013df0: f940116b ldr x11, [x11, #32] kvm_pgtable_hyp_destroy:435.29 (pgtable.c) sbepe pgt->mm_ops->put_page(pgt->║pgd); ~ 00013df4: f9400540 ldr x0, [x10, #8] ~ 00013df8: b90007e8 str w8, [sp, #4] kvm_pgtable_hyp_destroy:435.2 (pgtable.c) sbepe ║pgt->mm_ops->put_page(pgt->pgd); ~ 00013dfc: d63f0160 blr x11 kvm_pgtable_hyp_destroy:436.2 (pgtable.c) Sbepe ║pgt->pgd = NULL; ~ 00013e00: f85f83aa ldur x10, [x29, #-8] ~ 00013e04: aa1f03eb mov x11, xzr kvm_pgtable_hyp_destroy:436.11 (pgtable.c) sbepe pgt->pgd ║= NULL; ~ 00013e08: f900054b str x11, [x10, #8] kvm_pgtable_hyp_destroy:437.1 (pgtable.c) Sbepe ║} ~ 00013e0c: a9447bfd ldp x29, x30, [sp, #64] ~ 00013e10: 910143ff add sp, sp, #0x50 00013d60 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013e14: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13d54 0x13e18 (DW_OP_fbreg -0x8) kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:426 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x13d54 0x13e18 (DW_OP_breg31 0x20) kvm_pgtable_hyp_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:428 **00013e18 <hyp_free_walker>: + hyp_free_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x8) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x10) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13e18 0x13e7c (DW_OP_fbreg -0x14) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13e18 0x13e7c (DW_OP_breg31 0x20) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13e18 0x13e7c (DW_OP_breg31 0x1c) +arg param const(pointer(no type)) 0x13e18 0x13e7c (DW_OP_breg31 0x10) hyp_free_walker:419.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x8) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x10) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13e18 0x13e7c (DW_OP_fbreg -0x14) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13e18 0x13e7c (DW_OP_breg31 0x20) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13e18 0x13e7c (DW_OP_breg31 0x1c) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:418 +arg param const(pointer(no type)) 0x13e18 0x13e7c (DW_OP_breg31 0x10) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:418 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x13e18 0x13e7c (DW_OP_breg31 0x8) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:420 ~ 00013e18: d10143ff sub sp, sp, #0x50 ~ 00013e1c: a9047bfd stp x29, x30, [sp, #64] 00013e18 CFA:r31 r29:u r30:u ~ 00013e20: 910103fd add x29, sp, #0x40 ~ 00013e24: f81f83a0 stur x0, [x29, #-8] ~ 00013e28: f81f03a1 stur x1, [x29, #-16] ~ 00013e2c: b81ec3a2 stur w2, [x29, #-20] ~ 00013e30: f90013e3 str x3, [sp, #32] ~ 00013e34: b9001fe4 str w4, [sp, #28] ~ 00013e38: f9000be5 str x5, [sp, #16] hyp_free_walker:420.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║arg; ~ 00013e3c: f9400be8 ldr x8, [sp, #16] hyp_free_walker:420.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = arg; ~ 00013e40: f90007e8 str x8, [sp, #8] hyp_free_walker:422.2 (pgtable.c) Sbepe ║mm_ops->put_page((void *)kvm_pte_follow(*ptep, mm_ops)); ~ 00013e44: f94007e8 ldr x8, [sp, #8] hyp_free_walker:422.10 (pgtable.c) sbepe mm_ops->║put_page((void *)kvm_pte_follow(*ptep, mm_ops)); ~ 00013e48: f9401109 ldr x9, [x8, #32] hyp_free_walker:422.43 (pgtable.c) sbepe mm_ops->put_page((void *)kvm_pte_follow(*║ptep, mm_ops)); ~ 00013e4c: f94013ea ldr x10, [sp, #32] hyp_free_walker:422.42 (pgtable.c) sbepe mm_ops->put_page((void *)kvm_pte_follow(║*ptep, mm_ops)); ~ 00013e50: f9400140 ldr x0, [x10] hyp_free_walker:422.27 (pgtable.c) sbepe mm_ops->put_page((void *)║kvm_pte_follow(*ptep, mm_ops)); ~ 00013e54: aa0803e1 mov x1, x8 ~ 00013e58: f90003e9 str x9, [sp] ~ 00013e5c: 94000509 bl 15280 <kvm_pte_follow> ~ 00013e60: f94003e8 ldr x8, [sp] <- 00013e5c(bl-succ)<return> hyp_free_walker:422.2 (pgtable.c) sbepe ║mm_ops->put_page((void *)kvm_pte_follow(*ptep, mm_ops)); ~ 00013e64: d63f0100 blr x8 ~ 00013e68: 2a1f03e2 mov w2, wzr hyp_free_walker:423.2 (pgtable.c) Sbepe ║return 0; ~ 00013e6c: 2a0203e0 mov w0, w2 ~ 00013e70: a9447bfd ldp x29, x30, [sp, #64] ~ 00013e74: 910143ff add sp, sp, #0x50 00013e24 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013e78: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x8) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e18 0x13e7c (DW_OP_fbreg -0x10) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13e18 0x13e7c (DW_OP_fbreg -0x14) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13e18 0x13e7c (DW_OP_breg31 0x20) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:417 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13e18 0x13e7c (DW_OP_breg31 0x1c) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:418 -arg param const(pointer(no type)) 0x13e18 0x13e7c (DW_OP_breg31 0x10) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:418 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x13e18 0x13e7c (DW_OP_breg31 0x8) hyp_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:420 **00013e7c <kvm_pgtable_stage2_map>: + kvm_pgtable_stage2_map params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13e7c 0x13f54 (DW_OP_fbreg -0x10) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x18) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x20) +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x28) +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13e7c 0x13f54 (DW_OP_fbreg -0x2c) +mc param pointer(no type) 0x13e7c 0x13f54 (DW_OP_fbreg -0x38) kvm_pgtable_stage2_map:633.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13e7c 0x13f54 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x18) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x20) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x28) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:631 +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13e7c 0x13f54 (DW_OP_fbreg -0x2c) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:631 +mc param pointer(no type) 0x13e7c 0x13f54 (DW_OP_fbreg -0x38) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:632 +ret var int (base type, DW_ATE_signed size:4) 0x13e7c 0x13f54 (DW_OP_fbreg -0x3c) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:634 +map_data var struct stage2_map_data<d70f1>/<e7179> 0x13e7c 0x13f54 (DW_OP_breg31 0x20) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:635 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x13e7c 0x13f54 (DW_OP_breg31 0x8) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:641 ~ 00013e7c: d10283ff sub sp, sp, #0xa0 <- 0000c138(bl)<kvm_pgtable_stage2_map> ~ 00013e80: a9097bfd stp x29, x30, [sp, #144] 00013e7c CFA:r31 r29:u r30:u ~ 00013e84: 910243fd add x29, sp, #0x90 ~ 00013e88: f81f03a0 stur x0, [x29, #-16] ~ 00013e8c: f81e83a1 stur x1, [x29, #-24] ~ 00013e90: f81e03a2 stur x2, [x29, #-32] ~ 00013e94: f81d83a3 stur x3, [x29, #-40] ~ 00013e98: b81d43a4 stur w4, [x29, #-44] ~ 00013e9c: f81c83a5 stur x5, [x29, #-56] kvm_pgtable_stage2_map:636.12 (pgtable.c) SbePe .phys = ║ALIGN_DOWN(phys, PAGE_SIZE), ~ 00013ea0: f85d83a8 ldur x8, [x29, #-40] ~ 00013ea4: 9274cd08 and x8, x8, #0xfffffffffffff000 kvm_pgtable_stage2_map:635.36 (pgtable.c) Sbepe struct stage2_map_data map_data = { ~ 00013ea8: f90013e8 str x8, [sp, #32] ~ 00013eac: aa1f03e8 mov x8, xzr ~ 00013eb0: f90017e8 str x8, [sp, #40] ~ 00013eb4: f9001be8 str x8, [sp, #48] kvm_pgtable_stage2_map:637.11 (pgtable.c) Sbepe .mmu = ║pgt->mmu, ~ 00013eb8: f85f03a8 ldur x8, [x29, #-16] kvm_pgtable_stage2_map:637.16 (pgtable.c) sbepe .mmu = pgt->║mmu, ~ 00013ebc: f9400d08 ldr x8, [x8, #24] kvm_pgtable_stage2_map:635.36 (pgtable.c) Sbepe struct stage2_map_data map_data = { ~ 00013ec0: f9001fe8 str x8, [sp, #56] kvm_pgtable_stage2_map:638.15 (pgtable.c) Sbepe .memcache = ║mc, ~ 00013ec4: f85c83a8 ldur x8, [x29, #-56] kvm_pgtable_stage2_map:635.36 (pgtable.c) Sbepe struct stage2_map_data map_data = { ~ 00013ec8: f90023e8 str x8, [sp, #64] kvm_pgtable_stage2_map:639.14 (pgtable.c) Sbepe .mm_ops = ║pgt->mm_ops, ~ 00013ecc: f85f03a8 ldur x8, [x29, #-16] kvm_pgtable_stage2_map:639.19 (pgtable.c) sbepe .mm_ops = pgt->║mm_ops, ~ 00013ed0: f9400908 ldr x8, [x8, #16] kvm_pgtable_stage2_map:635.36 (pgtable.c) Sbepe struct stage2_map_data map_data = { ~ 00013ed4: f90027e8 str x8, [sp, #72] kvm_pgtable_stage2_map:641.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 00013ed8: 90000008 adrp x8, 13000 <host_spsr_to_spsr32+0x3c> ~ 00013edc: 913d5108 add x8, x8, #0xf54 ~ 00013ee0: f90007e8 str x8, [sp, #8] ~ 00013ee4: 910083e8 add x8, sp, #0x20 ~ 00013ee8: f9000be8 str x8, [sp, #16] ~ 00013eec: 528000e9 mov w9, #0x7 // #7 ~ 00013ef0: b9001be9 str w9, [sp, #24] kvm_pgtable_stage2_map:649.33 (pgtable.c) Sbepe ret = stage2_map_set_prot_attr(║prot, &map_data); ~ 00013ef4: b85d43a0 ldur w0, [x29, #-44] kvm_pgtable_stage2_map:649.8 (pgtable.c) sbepe ret = ║stage2_map_set_prot_attr(prot, &map_data); ~ 00013ef8: aa0803e1 mov x1, x8 ~ 00013efc: 9400004e bl 14034 <stage2_map_set_prot_attr> kvm_pgtable_stage2_map:649.6 (pgtable.c) sbepe ret ║= stage2_map_set_prot_attr(prot, &map_data); ~ 00013f00: b81c43a0 stur w0, [x29, #-60] <- 00013efc(bl-succ)<return> kvm_pgtable_stage2_map:650.6 (pgtable.c) Sbepe if (║ret) ~ 00013f04: b85c43a9 ldur w9, [x29, #-60] kvm_pgtable_stage2_map:650.6 (pgtable.c) sbepe if (║ret) ~ ┌──00013f08: 340000a9 cbz w9, 13f1c <kvm_pgtable_stage2_map+0xa0> ~ │┌─00013f0c: 14000001 b 13f10 <kvm_pgtable_stage2_map+0x94> <- 00013f08(b.cc-succ)<fallthrough> ││ ││ kvm_pgtable_stage2_map:651.10 (pgtable.c) Sbepe return ║ret; ~ │└>00013f10: b85c43a8 ldur w8, [x29, #-60] <- 00013f0c(b)<kvm_pgtable_stage2_map+0x94> kvm_pgtable_stage2_map:651.3 (pgtable.c) sbepe ║return ret; ~ 00013f14: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼──00013f18: 1400000b b 13f44 <kvm_pgtable_stage2_map+0xc8> ││ ││ kvm_pgtable_stage2_map:653.25 (pgtable.c) Sbepe ret = kvm_pgtable_walk(║pgt, addr, size, &walker); ~ │└─>00013f1c: f85f03a0 ldur x0, [x29, #-16] <- 00013f08(b.cc)<kvm_pgtable_stage2_map+0xa0> kvm_pgtable_stage2_map:653.30 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, ║addr, size, &walker); ~ 00013f20: f85e83a1 ldur x1, [x29, #-24] kvm_pgtable_stage2_map:653.36 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, addr, ║size, &walker); ~ 00013f24: f85e03a2 ldur x2, [x29, #-32] ~ 00013f28: 910023e3 add x3, sp, #0x8 kvm_pgtable_stage2_map:653.8 (pgtable.c) sbepe ret = ║kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00013f2c: 97fffe13 bl 13778 <kvm_pgtable_walk> kvm_pgtable_stage2_map:653.6 (pgtable.c) sbepe ret ║= kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00013f30: b81c43a0 stur w0, [x29, #-60] <- 00013f2c(bl-succ)<return> kvm_pgtable_stage2_map:654.2 (pgtable.c) Sbepe ║dsb(ishst); ~ 00013f34: d5033a9f dsb ishst kvm_pgtable_stage2_map:655.9 (pgtable.c) Sbepe return ║ret; ~ 00013f38: b85c43a8 ldur w8, [x29, #-60] kvm_pgtable_stage2_map:655.2 (pgtable.c) sbepe ║return ret; ~ 00013f3c: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00013f40: 14000001 b 13f44 <kvm_pgtable_stage2_map+0xc8> │ │ │ │ kvm_pgtable_stage2_map:656.1 (pgtable.c) Sbepe ║} ~ └>└>00013f44: b85fc3a0 ldur w0, [x29, #-4] <- 00013f18(b)<kvm_pgtable_stage2_map+0xc8>,00013f40(b)<kvm_pgtable_stage2_map+0xc8> ~ 00013f48: a9497bfd ldp x29, x30, [sp, #144] ~ 00013f4c: 910283ff add sp, sp, #0xa0 00013e88 CFA:r29+16 r29:c-16 r30:c-8 ~ 00013f50: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x13e7c 0x13f54 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x18) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x20) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:630 -phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13e7c 0x13f54 (DW_OP_fbreg -0x28) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:631 -prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x13e7c 0x13f54 (DW_OP_fbreg -0x2c) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:631 -mc param pointer(no type) 0x13e7c 0x13f54 (DW_OP_fbreg -0x38) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:632 -ret var int (base type, DW_ATE_signed size:4) 0x13e7c 0x13f54 (DW_OP_fbreg -0x3c) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:634 -map_data var struct stage2_map_data<d70f1>/<e7179> 0x13e7c 0x13f54 (DW_OP_breg31 0x20) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:635 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x13e7c 0x13f54 (DW_OP_breg31 0x8) kvm_pgtable_stage2_map:arch/arm64/kvm/hyp/nvhe/../pgtable.c:641 **00013f54 <stage2_map_walker>: + stage2_map_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13f54 0x14034 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13f54 0x14034 (DW_OP_breg31 0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13f54 0x14034 (DW_OP_breg31 0x24) +arg param const(pointer(no type)) 0x13f54 0x14034 (DW_OP_breg31 0x18) stage2_map_walker:615.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x10) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x18) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13f54 0x14034 (DW_OP_fbreg -0x1c) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13f54 0x14034 (DW_OP_breg31 0x28) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13f54 0x14034 (DW_OP_breg31 0x24) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:614 +arg param const(pointer(no type)) 0x13f54 0x14034 (DW_OP_breg31 0x18) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:614 +data var pointer(struct stage2_map_data<d70f1>/<e7179>) 0x13f54 0x14034 (DW_OP_breg31 0x10) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:616 ~ 00013f54: d10183ff sub sp, sp, #0x60 ~ 00013f58: a9057bfd stp x29, x30, [sp, #80] 00013f54 CFA:r31 r29:u r30:u ~ 00013f5c: 910143fd add x29, sp, #0x50 ~ 00013f60: f81f03a0 stur x0, [x29, #-16] ~ 00013f64: f81e83a1 stur x1, [x29, #-24] ~ 00013f68: b81e43a2 stur w2, [x29, #-28] ~ 00013f6c: f90017e3 str x3, [sp, #40] ~ 00013f70: b90027e4 str w4, [sp, #36] ~ 00013f74: f9000fe5 str x5, [sp, #24] stage2_map_walker:616.33 (pgtable.c) SbePe struct stage2_map_data *data = ║arg; ~ 00013f78: f9400fe8 ldr x8, [sp, #24] stage2_map_walker:616.26 (pgtable.c) sbepe struct stage2_map_data *║data = arg; ~ 00013f7c: f9000be8 str x8, [sp, #16] stage2_map_walker:618.10 (pgtable.c) Sbepe switch (║flag) { ~ 00013f80: b94027e9 ldr w9, [sp, #36] stage2_map_walker:618.2 (pgtable.c) sbepe ║switch (flag) { ~ 00013f84: 2a0903ea mov w10, w9 ~ 00013f88: 71000529 subs w9, w9, #0x1 ~ 00013f8c: b9000fea str w10, [sp, #12] ~ ┌───00013f90: 54000240 b.eq 13fd8 <stage2_map_walker+0x84> // b.none ~ │ ┌─00013f94: 14000001 b 13f98 <stage2_map_walker+0x44> <- 00013f90(b.cc-succ)<fallthrough> │ │ ~ │ └>00013f98: b9400fe8 ldr w8, [sp, #12] <- 00013f94(b)<stage2_map_walker+0x44> stage2_map_walker:618.2 (pgtable.c) sbepe ║switch (flag) { ~ 00013f9c: 71000909 subs w9, w8, #0x2 ~ │┌──00013fa0: 540000c0 b.eq 13fb8 <stage2_map_walker+0x64> // b.none ││ ~ ││┌─00013fa4: 14000001 b 13fa8 <stage2_map_walker+0x54> <- 00013fa0(b.cc-succ)<fallthrough> │││ ~ ││└>00013fa8: b9400fe8 ldr w8, [sp, #12] <- 00013fa4(b)<stage2_map_walker+0x54> ││ stage2_map_walker:618.2 (pgtable.c) sbepe ║switch (flag) { ~ ││ 00013fac: 71001109 subs w9, w8, #0x4 ~ ││┌─00013fb0: 54000240 b.eq 13ff8 <stage2_map_walker+0xa4> // b.none │││ ~ ┌┼┼┼─00013fb4: 14000019 b 14018 <stage2_map_walker+0xc4> <- 00013fb0(b.cc-succ)<fallthrough> ││││ ││││ stage2_map_walker:620.36 (pgtable.c) Sbepe return stage2_map_walk_table_pre(║addr, end, level, ptep, data); ~ ││└┼>00013fb8: f85f03a0 ldur x0, [x29, #-16] <- 00013fa0(b.cc)<stage2_map_walker+0x64> ││ │ stage2_map_walker:620.42 (pgtable.c) sbepe return stage2_map_walk_table_pre(addr, ║end, level, ptep, data); ~ ││ │ 00013fbc: f85e83a1 ldur x1, [x29, #-24] ││ │ stage2_map_walker:620.47 (pgtable.c) sbepe return stage2_map_walk_table_pre(addr, end, ║level, ptep, data); ~ ││ │ 00013fc0: b85e43a2 ldur w2, [x29, #-28] ││ │ stage2_map_walker:620.54 (pgtable.c) sbepe return stage2_map_walk_table_pre(addr, end, level, ║ptep, data); ~ ││ │ 00013fc4: f94017e3 ldr x3, [sp, #40] ││ │ stage2_map_walker:620.60 (pgtable.c) sbepe return stage2_map_walk_table_pre(addr, end, level, ptep, ║data); ~ ││ │ 00013fc8: f9400be4 ldr x4, [sp, #16] ││ │ stage2_map_walker:620.10 (pgtable.c) sbepe return ║stage2_map_walk_table_pre(addr, end, level, ptep, data); ~ ││ │ 00013fcc: 940005d0 bl 1570c <stage2_map_walk_table_pre> ││ │ ││ │ stage2_map_walker:620.3 (pgtable.c) sbepe ║return stage2_map_walk_table_pre(addr, end, level, ptep, data); ~ ││ │ 00013fd0: b81fc3a0 stur w0, [x29, #-4] <- 00013fcc(bl-succ)<return> ~ ┌──┼┼─┼─00013fd4: 14000014 b 14024 <stage2_map_walker+0xd0> │ ││ │ │ ││ │ stage2_map_walker:622.31 (pgtable.c) Sbepe return stage2_map_walk_leaf(║addr, end, level, ptep, data); ~ │ │└─┼>00013fd8: f85f03a0 ldur x0, [x29, #-16] <- 00013f90(b.cc)<stage2_map_walker+0x84> │ │ │ stage2_map_walker:622.37 (pgtable.c) sbepe return stage2_map_walk_leaf(addr, ║end, level, ptep, data); ~ │ │ │ 00013fdc: f85e83a1 ldur x1, [x29, #-24] │ │ │ stage2_map_walker:622.42 (pgtable.c) sbepe return stage2_map_walk_leaf(addr, end, ║level, ptep, data); ~ │ │ │ 00013fe0: b85e43a2 ldur w2, [x29, #-28] │ │ │ stage2_map_walker:622.49 (pgtable.c) sbepe return stage2_map_walk_leaf(addr, end, level, ║ptep, data); ~ │ │ │ 00013fe4: f94017e3 ldr x3, [sp, #40] │ │ │ stage2_map_walker:622.55 (pgtable.c) sbepe return stage2_map_walk_leaf(addr, end, level, ptep, ║data); ~ │ │ │ 00013fe8: f9400be4 ldr x4, [sp, #16] │ │ │ stage2_map_walker:622.10 (pgtable.c) sbepe return ║stage2_map_walk_leaf(addr, end, level, ptep, data); ~ │ │ │ 00013fec: 940005f1 bl 157b0 <stage2_map_walk_leaf> │ │ │ │ │ │ stage2_map_walker:622.3 (pgtable.c) sbepe ║return stage2_map_walk_leaf(addr, end, level, ptep, data); ~ │ │ │ 00013ff0: b81fc3a0 stur w0, [x29, #-4] <- 00013fec(bl-succ)<return> ~ │ ┌┼──┼─00013ff4: 1400000c b 14024 <stage2_map_walker+0xd0> │ ││ │ │ ││ │ stage2_map_walker:624.37 (pgtable.c) Sbepe return stage2_map_walk_table_post(║addr, end, level, ptep, data); ~ │ ││ └>00013ff8: f85f03a0 ldur x0, [x29, #-16] <- 00013fb0(b.cc)<stage2_map_walker+0xa4> │ ││ stage2_map_walker:624.43 (pgtable.c) sbepe return stage2_map_walk_table_post(addr, ║end, level, ptep, data); ~ │ ││ 00013ffc: f85e83a1 ldur x1, [x29, #-24] │ ││ stage2_map_walker:624.48 (pgtable.c) sbepe return stage2_map_walk_table_post(addr, end, ║level, ptep, data); ~ │ ││ 00014000: b85e43a2 ldur w2, [x29, #-28] │ ││ stage2_map_walker:624.55 (pgtable.c) sbepe return stage2_map_walk_table_post(addr, end, level, ║ptep, data); ~ │ ││ 00014004: f94017e3 ldr x3, [sp, #40] │ ││ stage2_map_walker:624.61 (pgtable.c) sbepe return stage2_map_walk_table_post(addr, end, level, ptep, ║data); ~ │ ││ 00014008: f9400be4 ldr x4, [sp, #16] │ ││ stage2_map_walker:624.10 (pgtable.c) sbepe return ║stage2_map_walk_table_post(addr, end, level, ptep, data); ~ │ ││ 0001400c: 94000657 bl 15968 <stage2_map_walk_table_post> │ ││ │ ││ stage2_map_walker:624.3 (pgtable.c) sbepe ║return stage2_map_walk_table_post(addr, end, level, ptep, data); ~ │ ││ 00014010: b81fc3a0 stur w0, [x29, #-4] <- 0001400c(bl-succ)<return> ~ │ ││┌───00014014: 14000004 b 14024 <stage2_map_walker+0xd0> │ │││ ~ │ │└┼──>00014018: 128002a8 mov w8, #0xffffffea // #-22 <- 00013fb4(b)<stage2_map_walker+0xc4> │ │ │ stage2_map_walker:627.2 (pgtable.c) Sbepe ║return -EINVAL; ~ │ │ │ 0001401c: b81fc3a8 stur w8, [x29, #-4] ~ │ │ │ ┌─00014020: 14000001 b 14024 <stage2_map_walker+0xd0> │ │ │ │ │ │ │ │ stage2_map_walker:628.1 (pgtable.c) Sbepe ║} ~ └>└>└>└>00014024: b85fc3a0 ldur w0, [x29, #-4] <- 00013fd4(b)<stage2_map_walker+0xd0>,00013ff4(b)<stage2_map_walker+0xd0>,00014014(b)<stage2_map_walker+0xd0>,00014020(b)<stage2_map_walker+0xd0> ~ 00014028: a9457bfd ldp x29, x30, [sp, #80] ~ 0001402c: 910183ff add sp, sp, #0x60 00013f60 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014030: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x10) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x13f54 0x14034 (DW_OP_fbreg -0x18) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x13f54 0x14034 (DW_OP_fbreg -0x1c) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x13f54 0x14034 (DW_OP_breg31 0x28) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:613 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x13f54 0x14034 (DW_OP_breg31 0x24) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:614 -arg param const(pointer(no type)) 0x13f54 0x14034 (DW_OP_breg31 0x18) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:614 -data var pointer(struct stage2_map_data<d70f1>/<e7179>) 0x13f54 0x14034 (DW_OP_breg31 0x10) stage2_map_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:616 **00014034 <stage2_map_set_prot_attr>: + stage2_map_set_prot_attr params: +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x14034 0x14354 (DW_OP_fbreg 0x58) +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x14034 0x14354 (DW_OP_fbreg 0x50) stage2_map_set_prot_attr:453.0 (pgtable.c) Sbepe ║{ 00014034 CFA:r31 +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x14034 0x14354 (DW_OP_fbreg 0x58) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:451 +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x14034 0x14354 (DW_OP_fbreg 0x50) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:452 +device var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14034 0x14354 (DW_OP_fbreg 0x4c) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:454 +attr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14034 0x14354 (DW_OP_fbreg 0x40) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:455 +sh var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14034 0x14354 (DW_OP_fbreg 0x1c) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:457 ~ 00014034: d10343ff sub sp, sp, #0xd0 <- 00013efc(bl)<stage2_map_set_prot_attr> ~ 00014038: b9005be0 str w0, [sp, #88] ~ 0001403c: f9002be1 str x1, [sp, #80] stage2_map_set_prot_attr:454.16 (pgtable.c) SbePe bool device = ║prot & KVM_PGTABLE_PROT_DEVICE; ~ 00014040: b9405be8 ldr w8, [sp, #88] ~ 00014044: 53030d08 ubfx w8, w8, #3, #1 stage2_map_set_prot_attr:454.7 (pgtable.c) sbepe bool ║device = prot & KVM_PGTABLE_PROT_DEVICE; ~ 00014048: 390133e8 strb w8, [sp, #76] stage2_map_set_prot_attr:455.19 (pgtable.c) Sbepe kvm_pte_t attr = ║device ? PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ 0001404c: 394133e8 ldrb w8, [sp, #76] ~ ┌──────00014050: 36000848 tbz w8, #0, 14158 <stage2_map_set_prot_attr+0x124> ~ │ ┌─00014054: 14000001 b 14058 <stage2_map_set_prot_attr+0x24> <- 00014050(b.cc-succ)<fallthrough> │ │ ~ │ └>00014058: 52800408 mov w8, #0x20 // #32 <- 00014054(b)<stage2_map_set_prot_attr+0x24> ~ 0001405c: b90063e8 str w8, [sp, #96] p: 0x14060 0x14118 cpus_have_const_cap inlined from stage2_map_set_prot_attr:455 (pgtable.c) <d7abc>:<lexical_block>: p cpus_have_const_cap:479.30 (cpufeature.h) Sbepe return cpus_have_final_cap(║num); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14060 0x14154 (DW_OP_fbreg 0x38) lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:455 +num param int (base type, DW_ATE_signed size:4) 0x14060 0x14118 (DW_OP_fbreg 0x60) cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~p 00014060: b94063e8 ldr w8, [sp, #96] ~p 00014064: b9006be8 str w8, [sp, #104] q: 0x14068 0x14110 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <d7ada>:<d7abc>:<lexical_block>: r: 0x14068 0x14090 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <d7af8>:<d7ada>:<d7abc>:<lexical_block>: pqr 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) 0x14068 0x14110 (DW_OP_fbreg 0x68) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14068 0x14090 (DW_OP_fbreg 0x7c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~pqr 00014068: f0000029 adrp x9, 1b000 <hyp_memory+0x460> ~pqr 0001406c: b9479928 ldr w8, [x9, #1944] ~pqr 00014070: 71000108 subs w8, w8, #0x0 ~pqr 00014074: 1a9f07ea cset w10, ne // ne = any ~pqr 00014078: 3901f3ea strb w10, [sp, #124] pqr system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~pqr 0001407c: 3941f3ea ldrb w10, [sp, #124] ~pqr 00014080: 2a0a03e9 mov w9, w10 ~pqr 00014084: 92400129 and x9, x9, #0x1 pqr system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~pqr 00014088: f9003be9 str x9, [sp, #112] pqr system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~pqr 0001408c: f9403be9 ldr x9, [sp, #112] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14068 0x14090 (DW_OP_fbreg 0x7c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c pq cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~pq │ ┌────00014090: b4000389 cbz x9, 14100 <stage2_map_set_prot_attr+0xcc> │ │ ~pq │ │ ┌─00014094: 14000001 b 14098 <stage2_map_set_prot_attr+0x64> <- 00014090(b.cc-succ)<fallthrough> │ │ │ pq │ │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~pq │ │ └>00014098: b9406be8 ldr w8, [sp, #104] <- 00014094(b)<stage2_map_set_prot_attr+0x64> ~pq │ │ 0001409c: b90093e8 str w8, [sp, #144] s: 0x140a0 0x14100 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d7b25>:<d7ada>:<d7abc>:<lexical_block>: pqs │ │ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0x140a0 0x14100 (DW_OP_fbreg 0x90) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~pqs │ │ 000140a0: b94093e8 ldr w8, [sp, #144] pqs │ │ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~pqs │ │ 000140a4: 7100f508 subs w8, w8, #0x3d ~pqs │ │ ┌──000140a8: 540000ab b.lt 140bc <stage2_map_set_prot_attr+0x88> // b.tstop │ │ │ ~pqs │ │ │┌─000140ac: 14000001 b 140b0 <stage2_map_set_prot_attr+0x7c> <- 000140a8(b.cc-succ)<fallthrough> │ │ ││ ~pqs │ │ │└>000140b0: 2a1f03e8 mov w8, wzr <- 000140ac(b)<stage2_map_set_prot_attr+0x7c> pqs │ │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~pqs │ │ │ 000140b4: 39025fe8 strb w8, [sp, #151] ~pqs │ │┌┼──000140b8: 14000013 b 14104 <stage2_map_set_prot_attr+0xd0> │ │││ pqs │ │││ __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)) 0x140bc 0x140f0 (DW_OP_fbreg 0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~pqs │ ││└─>000140bc: b98093e8 ldrsw x8, [sp, #144] <- 000140a8(b.cc)<stage2_map_set_prot_attr+0x88> ~pqs │ ││ 000140c0: d37ced08 lsl x8, x8, #4 ~pqs │ ││ 000140c4: f0000029 adrp x9, 1b000 <hyp_memory+0x460> ~pqs │ ││ 000140c8: 911e8129 add x9, x9, #0x7a0 ~pqs │ ││ 000140cc: b868692a ldr w10, [x9, x8] ~pqs │ ││ 000140d0: 7100014a subs w10, w10, #0x0 ~pqs │ ││ 000140d4: 1a9f07eb cset w11, ne // ne = any ~pqs │ ││ 000140d8: 390233eb strb w11, [sp, #140] pqs │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~pqs │ ││ 000140dc: 394233eb ldrb w11, [sp, #140] ~pqs │ ││ 000140e0: 2a0b03e8 mov w8, w11 ~pqs │ ││ 000140e4: 92400108 and x8, x8, #0x1 pqs │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~pqs │ ││ 000140e8: f90043e8 str x8, [sp, #128] pqs │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~pqs │ ││ 000140ec: f94043e8 ldr x8, [sp, #128] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x140bc 0x140f0 (DW_OP_fbreg 0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c pqs │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~pqs │ ││ 000140f0: f1000108 subs x8, x8, #0x0 ~pqs │ ││ 000140f4: 1a9f07eb cset w11, ne // ne = any pqs │ ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~pqs │ ││ 000140f8: 39025feb strb w11, [sp, #151] ~pqs │ ││ ┌─000140fc: 14000002 b 14104 <stage2_map_set_prot_attr+0xd0> -num param int (base type, DW_ATE_signed size:4) 0x140a0 0x14100 (DW_OP_fbreg 0x90) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c │ ││ │ pq │ ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~pq │ └┼─┼>00014100: d4210000 brk #0x800 <- 00014090(b.cc)<stage2_map_set_prot_attr+0xcc> │ │ │ t: 0x14104 0x14108 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d7b25>:<d7ada>:<d7abc>:<lexical_block>: pqt │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0x14104 0x14108 (DW_OP_fbreg 0x90) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~pqt │ └>└>00014104: 39425fe8 ldrb w8, [sp, #151] <- 000140b8(b)<stage2_map_set_prot_attr+0xd0>,000140fc(b)<stage2_map_set_prot_attr+0xd0> -num param int (base type, DW_ATE_signed size:4) 0x14104 0x14108 (DW_OP_fbreg 0x90) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c pq cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~pq 00014108: 3901bfe8 strb w8, [sp, #111] pq cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~pq 0001410c: 3941bfe8 ldrb w8, [sp, #111] -num param int (base type, DW_ATE_signed size:4) 0x14068 0x14110 (DW_OP_fbreg 0x68) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c p cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~p 00014110: 39019fe8 strb w8, [sp, #103] p cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~p 00014114: 39419fe8 ldrb w8, [sp, #103] -num param int (base type, DW_ATE_signed size:4) 0x14060 0x14118 (DW_OP_fbreg 0x60) cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c stage2_map_set_prot_attr:455.28 (pgtable.c) Sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ 00014118: 71000508 subs w8, w8, #0x1 ~ │ ┌──0001411c: 540000c1 b.ne 14134 <stage2_map_set_prot_attr+0x100> // b.any │ │ ~ │ │┌─00014120: 14000001 b 14124 <stage2_map_set_prot_attr+0xf0> <- 0001411c(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00014124: 52800088 mov w8, #0x4 // #4 <- 00014120(b)<stage2_map_set_prot_attr+0xf0> ~ │ │ 00014128: 2a0803e9 mov w9, w8 │ │ stage2_map_set_prot_attr:455.28 (pgtable.c) sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ │ │ 0001412c: f9001fe9 str x9, [sp, #56] ~ │ ┌┼──00014130: 14000005 b 14144 <stage2_map_set_prot_attr+0x110> │ ││ ~ │ │└─>00014134: 52800088 mov w8, #0x4 // #4 <- 0001411c(b.cc)<stage2_map_set_prot_attr+0x100> ~ │ │ 00014138: 2a0803e9 mov w9, w8 │ │ stage2_map_set_prot_attr:455.28 (pgtable.c) sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ │ │ 0001413c: f9001fe9 str x9, [sp, #56] ~ │ │ ┌─00014140: 14000001 b 14144 <stage2_map_set_prot_attr+0x110> │ │ │ │ │ │ stage2_map_set_prot_attr:455.28 (pgtable.c) sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ │ └>└>00014144: f9401fe8 ldr x8, [sp, #56] <- 00014130(b)<stage2_map_set_prot_attr+0x110>,00014140(b)<stage2_map_set_prot_attr+0x110> stage2_map_set_prot_attr:455.28 (pgtable.c) sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ 00014148: f9001be8 str x8, [sp, #48] stage2_map_set_prot_attr:455.28 (pgtable.c) sbepe kvm_pte_t attr = device ? ║PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ 0001414c: f9401be8 ldr x8, [sp, #48] ~ 00014150: f90007e8 str x8, [sp, #8] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14060 0x14154 (DW_OP_fbreg 0x38) lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:455 stage2_map_set_prot_attr:455.19 (pgtable.c) sbepe kvm_pte_t attr = ║device ? PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ │┌─────00014154: 14000041 b 14258 <stage2_map_set_prot_attr+0x224> ││ ~ └┼────>00014158: 52800408 mov w8, #0x20 // #32 <- 00014050(b.cc)<stage2_map_set_prot_attr+0x124> ~ 0001415c: b9009be8 str w8, [sp, #152] u: 0x14160 0x14218 cpus_have_const_cap inlined from stage2_map_set_prot_attr:456 (pgtable.c) <d7b72>:<lexical_block>: u cpus_have_const_cap:479.30 (cpufeature.h) Sbepe return cpus_have_final_cap(║num); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14160 0x14254 (DW_OP_fbreg 0x28) lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:456 +num param int (base type, DW_ATE_signed size:4) 0x14160 0x14218 (DW_OP_fbreg 0x98) cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~u 00014160: b9409be8 ldr w8, [sp, #152] ~u 00014164: b900a3e8 str w8, [sp, #160] v: 0x14168 0x14210 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <d7b90>:<d7b72>:<lexical_block>: w: 0x14168 0x14190 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <d7bae>:<d7b90>:<d7b72>:<lexical_block>: uvw system_capabilities_finalized:419.9 (cpufeature.h) Sbepe return ║static_branch_likely(&arm64_const_caps_ready); +num param int (base type, DW_ATE_signed size:4) 0x14168 0x14210 (DW_OP_fbreg 0xa0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14168 0x14190 (DW_OP_fbreg 0xb4) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~uvw 00014168: f0000029 adrp x9, 1b000 <hyp_memory+0x460> ~uvw 0001416c: b9479928 ldr w8, [x9, #1944] ~uvw 00014170: 71000108 subs w8, w8, #0x0 ~uvw 00014174: 1a9f07ea cset w10, ne // ne = any ~uvw 00014178: 3902d3ea strb w10, [sp, #180] uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 0001417c: 3942d3ea ldrb w10, [sp, #180] ~uvw 00014180: 2a0a03e9 mov w9, w10 ~uvw 00014184: 92400129 and x9, x9, #0x1 uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 00014188: f90057e9 str x9, [sp, #168] uvw system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~uvw 0001418c: f94057e9 ldr x9, [sp, #168] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14168 0x14190 (DW_OP_fbreg 0xb4) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c uv cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~uv │┌────00014190: b4000389 cbz x9, 14200 <stage2_map_set_prot_attr+0x1cc> ││ ~uv ││ ┌─00014194: 14000001 b 14198 <stage2_map_set_prot_attr+0x164> <- 00014190(b.cc-succ)<fallthrough> ││ │ uv ││ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~uv ││ └>00014198: b940a3e8 ldr w8, [sp, #160] <- 00014194(b)<stage2_map_set_prot_attr+0x164> ~uv ││ 0001419c: b900cbe8 str w8, [sp, #200] x: 0x141a0 0x14200 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d7bdb>:<d7b90>:<d7b72>:<lexical_block>: uvx ││ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0x141a0 0x14200 (DW_OP_fbreg 0xc8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~uvx ││ 000141a0: b940cbe8 ldr w8, [sp, #200] uvx ││ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~uvx ││ 000141a4: 7100f508 subs w8, w8, #0x3d ~uvx ││ ┌──000141a8: 540000ab b.lt 141bc <stage2_map_set_prot_attr+0x188> // b.tstop ││ │ ~uvx ││ │┌─000141ac: 14000001 b 141b0 <stage2_map_set_prot_attr+0x17c> <- 000141a8(b.cc-succ)<fallthrough> ││ ││ ~uvx ││ │└>000141b0: 2a1f03e8 mov w8, wzr <- 000141ac(b)<stage2_map_set_prot_attr+0x17c> uvx ││ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~uvx ││ │ 000141b4: 39033fe8 strb w8, [sp, #207] ~uvx ││┌┼──000141b8: 14000013 b 14204 <stage2_map_set_prot_attr+0x1d0> ││││ uvx ││││ __cpus_have_const_cap:446.9 (cpufeature.h) Sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x141bc 0x141f0 (DW_OP_fbreg 0xc4) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~uvx │││└─>000141bc: b980cbe8 ldrsw x8, [sp, #200] <- 000141a8(b.cc)<stage2_map_set_prot_attr+0x188> ~uvx │││ 000141c0: d37ced08 lsl x8, x8, #4 ~uvx │││ 000141c4: f0000029 adrp x9, 1b000 <hyp_memory+0x460> ~uvx │││ 000141c8: 911e8129 add x9, x9, #0x7a0 ~uvx │││ 000141cc: b868692a ldr w10, [x9, x8] ~uvx │││ 000141d0: 7100014a subs w10, w10, #0x0 ~uvx │││ 000141d4: 1a9f07eb cset w11, ne // ne = any ~uvx │││ 000141d8: 390313eb strb w11, [sp, #196] uvx │││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx │││ 000141dc: 394313eb ldrb w11, [sp, #196] ~uvx │││ 000141e0: 2a0b03e8 mov w8, w11 ~uvx │││ 000141e4: 92400108 and x8, x8, #0x1 uvx │││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx │││ 000141e8: f9005fe8 str x8, [sp, #184] uvx │││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx │││ 000141ec: f9405fe8 ldr x8, [sp, #184] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x141bc 0x141f0 (DW_OP_fbreg 0xc4) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c uvx │││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx │││ 000141f0: f1000108 subs x8, x8, #0x0 ~uvx │││ 000141f4: 1a9f07eb cset w11, ne // ne = any uvx │││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~uvx │││ 000141f8: 39033feb strb w11, [sp, #207] ~uvx │││ ┌─000141fc: 14000002 b 14204 <stage2_map_set_prot_attr+0x1d0> -num param int (base type, DW_ATE_signed size:4) 0x141a0 0x14200 (DW_OP_fbreg 0xc8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c │││ │ uv │││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~uv │└┼─┼>00014200: d4210000 brk #0x800 <- 00014190(b.cc)<stage2_map_set_prot_attr+0x1cc> │ │ │ y: 0x14204 0x14208 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d7bdb>:<d7b90>:<d7b72>:<lexical_block>: uvy │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0x14204 0x14208 (DW_OP_fbreg 0xc8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~uvy │ └>└>00014204: 39433fe8 ldrb w8, [sp, #207] <- 000141b8(b)<stage2_map_set_prot_attr+0x1d0>,000141fc(b)<stage2_map_set_prot_attr+0x1d0> -num param int (base type, DW_ATE_signed size:4) 0x14204 0x14208 (DW_OP_fbreg 0xc8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c uv cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~uv 00014208: 39029fe8 strb w8, [sp, #167] uv cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~uv 0001420c: 39429fe8 ldrb w8, [sp, #167] -num param int (base type, DW_ATE_signed size:4) 0x14168 0x14210 (DW_OP_fbreg 0xa0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c u cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~u 00014210: 39027fe8 strb w8, [sp, #159] u cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~u 00014214: 39427fe8 ldrb w8, [sp, #159] -num param int (base type, DW_ATE_signed size:4) 0x14160 0x14218 (DW_OP_fbreg 0x98) cpus_have_const_cap(inlined):lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c stage2_map_set_prot_attr:456.8 (pgtable.c) Sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ 00014218: 71000508 subs w8, w8, #0x1 ~ │ ┌──0001421c: 540000c1 b.ne 14234 <stage2_map_set_prot_attr+0x200> // b.any │ │ ~ │ │┌─00014220: 14000001 b 14224 <stage2_map_set_prot_attr+0x1f0> <- 0001421c(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00014224: 52800308 mov w8, #0x18 // #24 <- 00014220(b)<stage2_map_set_prot_attr+0x1f0> ~ │ │ 00014228: 2a0803e9 mov w9, w8 │ │ stage2_map_set_prot_attr:456.8 (pgtable.c) sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ │ │ 0001422c: f90017e9 str x9, [sp, #40] ~ │ ┌┼──00014230: 14000005 b 14244 <stage2_map_set_prot_attr+0x210> │ ││ ~ │ │└─>00014234: 52800788 mov w8, #0x3c // #60 <- 0001421c(b.cc)<stage2_map_set_prot_attr+0x200> ~ │ │ 00014238: 2a0803e9 mov w9, w8 │ │ stage2_map_set_prot_attr:456.8 (pgtable.c) sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ │ │ 0001423c: f90017e9 str x9, [sp, #40] ~ │ │ ┌─00014240: 14000001 b 14244 <stage2_map_set_prot_attr+0x210> │ │ │ │ │ │ stage2_map_set_prot_attr:456.8 (pgtable.c) sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ │ └>└>00014244: f94017e8 ldr x8, [sp, #40] <- 00014230(b)<stage2_map_set_prot_attr+0x210>,00014240(b)<stage2_map_set_prot_attr+0x210> stage2_map_set_prot_attr:456.8 (pgtable.c) sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ 00014248: f90013e8 str x8, [sp, #32] stage2_map_set_prot_attr:456.8 (pgtable.c) sbepe ║PAGE_S2_MEMATTR(NORMAL); ~ 0001424c: f94013e8 ldr x8, [sp, #32] ~ 00014250: f90007e8 str x8, [sp, #8] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14160 0x14254 (DW_OP_fbreg 0x28) lexblock:stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:456 stage2_map_set_prot_attr:455.19 (pgtable.c) Sbepe kvm_pte_t attr = ║device ? PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ │ ┌─00014254: 14000001 b 14258 <stage2_map_set_prot_attr+0x224> │ │ ~ └──>└>00014258: f94007e8 ldr x8, [sp, #8] <- 00014154(b)<stage2_map_set_prot_attr+0x224>,00014254(b)<stage2_map_set_prot_attr+0x224> stage2_map_set_prot_attr:455.12 (pgtable.c) sbepe kvm_pte_t ║attr = device ? PAGE_S2_MEMATTR(DEVICE_nGnRE) : ~ 0001425c: f90023e8 str x8, [sp, #64] ~ 00014260: 52800069 mov w9, #0x3 // #3 stage2_map_set_prot_attr:457.6 (pgtable.c) Sbepe u32 ║sh = KVM_PTE_LEAF_ATTR_LO_S2_SH_IS; ~ 00014264: b9001fe9 str w9, [sp, #28] stage2_map_set_prot_attr:459.6 (pgtable.c) Sbepe if (║!(prot & KVM_PGTABLE_PROT_X)) ~ 00014268: 394163e9 ldrb w9, [sp, #88] ~ ┌──0001426c: 370000c9 tbnz w9, #0, 14284 <stage2_map_set_prot_attr+0x250> ~ │┌─00014270: 14000001 b 14274 <stage2_map_set_prot_attr+0x240> <- 0001426c(b.cc-succ)<fallthrough> ││ ││ stage2_map_set_prot_attr:460.8 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_HI_S2_XN; ~ │└>00014274: f94023e8 ldr x8, [sp, #64] <- 00014270(b)<stage2_map_set_prot_attr+0x240> ~ 00014278: b24a0108 orr x8, x8, #0x40000000000000 ~ 0001427c: f90023e8 str x8, [sp, #64] stage2_map_set_prot_attr:460.3 (pgtable.c) sbepe ║attr |= KVM_PTE_LEAF_ATTR_HI_S2_XN; ~ ┌─┼──00014280: 14000008 b 142a0 <stage2_map_set_prot_attr+0x26c> │ │ │ │ stage2_map_set_prot_attr:461.11 (pgtable.c) Sbepe else if (║device) ~ │ └─>00014284: 394133e8 ldrb w8, [sp, #76] <- 0001426c(b.cc)<stage2_map_set_prot_attr+0x250> stage2_map_set_prot_attr:461.11 (pgtable.c) sbepe else if (║device) ~ │┌───00014288: 360000a8 tbz w8, #0, 1429c <stage2_map_set_prot_attr+0x268> ││ ~ ││ ┌─0001428c: 14000001 b 14290 <stage2_map_set_prot_attr+0x25c> <- 00014288(b.cc-succ)<fallthrough> ││ │ ~ ││ └>00014290: 128002a8 mov w8, #0xffffffea // #-22 <- 0001428c(b)<stage2_map_set_prot_attr+0x25c> ││ stage2_map_set_prot_attr:462.3 (pgtable.c) Sbepe ║return -EINVAL; ~ ││ 00014294: b9005fe8 str w8, [sp, #92] ~ ┌─┼┼───00014298: 1400002c b 14348 <stage2_map_set_prot_attr+0x314> │ ││ ~ │ │└>┌─0001429c: 14000001 b 142a0 <stage2_map_set_prot_attr+0x26c> <- 00014288(b.cc)<stage2_map_set_prot_attr+0x268> │ │ │ │ │ │ stage2_map_set_prot_attr:464.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_R) ~ │ └─>└>000142a0: 394163e8 ldrb w8, [sp, #88] <- 00014280(b)<stage2_map_set_prot_attr+0x26c>,0001429c(b)<stage2_map_set_prot_attr+0x26c> ~ │ ┌───000142a4: 361000c8 tbz w8, #2, 142bc <stage2_map_set_prot_attr+0x288> │ │ ~ │ │ ┌─000142a8: 14000001 b 142ac <stage2_map_set_prot_attr+0x278> <- 000142a4(b.cc-succ)<fallthrough> │ │ │ │ │ │ stage2_map_set_prot_attr:465.8 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R; ~ │ │ └>000142ac: f94023e8 ldr x8, [sp, #64] <- 000142a8(b)<stage2_map_set_prot_attr+0x278> ~ │ │ 000142b0: b27a0108 orr x8, x8, #0x40 ~ │ │ 000142b4: f90023e8 str x8, [sp, #64] │ │ stage2_map_set_prot_attr:465.3 (pgtable.c) sbepe ║attr |= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R; ~ │ │ ┌─000142b8: 14000001 b 142bc <stage2_map_set_prot_attr+0x288> │ │ │ │ │ │ stage2_map_set_prot_attr:467.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_W) ~ │ └>└>000142bc: 394163e8 ldrb w8, [sp, #88] <- 000142a4(b.cc)<stage2_map_set_prot_attr+0x288>,000142b8(b)<stage2_map_set_prot_attr+0x288> ~ │┌─────000142c0: 360800c8 tbz w8, #1, 142d8 <stage2_map_set_prot_attr+0x2a4> ││ ~ ││ ┌─000142c4: 14000001 b 142c8 <stage2_map_set_prot_attr+0x294> <- 000142c0(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_map_set_prot_attr:468.8 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W; ~ ││ └>000142c8: f94023e8 ldr x8, [sp, #64] <- 000142c4(b)<stage2_map_set_prot_attr+0x294> ~ ││ 000142cc: b2790108 orr x8, x8, #0x80 ~ ││ 000142d0: f90023e8 str x8, [sp, #64] ││ stage2_map_set_prot_attr:468.3 (pgtable.c) sbepe ║attr |= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W; ~ ││ ┌─000142d4: 14000001 b 142d8 <stage2_map_set_prot_attr+0x2a4> ││ │ ││ │ stage2_map_set_prot_attr:470.10 (pgtable.c) Sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ │└>┌─└>000142d8: 14000001 b 142dc <stage2_map_set_prot_attr+0x2a8> <- 000142c0(b.cc)<stage2_map_set_prot_attr+0x2a4>,000142d4(b)<stage2_map_set_prot_attr+0x2a4> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ │┌─└──>000142dc: 14000001 b 142e0 <stage2_map_set_prot_attr+0x2ac> <- 000142d8(b)<stage2_map_set_prot_attr+0x2a8> ││ ││ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌┼└────>000142e0: 14000001 b 142e4 <stage2_map_set_prot_attr+0x2b0> <- 000142dc(b)<stage2_map_set_prot_attr+0x2ac> ││ ││ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└┼─────>000142e4: 14000001 b 142e8 <stage2_map_set_prot_attr+0x2b4> <- 000142e0(b)<stage2_map_set_prot_attr+0x2b0> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└──┼─────>000142e8: 14000001 b 142ec <stage2_map_set_prot_attr+0x2b8> <- 000142e4(b)<stage2_map_set_prot_attr+0x2b4> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└────┼─────>000142ec: 14000001 b 142f0 <stage2_map_set_prot_attr+0x2bc> <- 000142e8(b)<stage2_map_set_prot_attr+0x2b8> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└──────┼─────>000142f0: 14000001 b 142f4 <stage2_map_set_prot_attr+0x2c0> <- 000142ec(b)<stage2_map_set_prot_attr+0x2bc> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└────────┼─────>000142f4: 14000001 b 142f8 <stage2_map_set_prot_attr+0x2c4> <- 000142f0(b)<stage2_map_set_prot_attr+0x2c0> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└──────────┼─────>000142f8: 14000001 b 142fc <stage2_map_set_prot_attr+0x2c8> <- 000142f4(b)<stage2_map_set_prot_attr+0x2c4> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ ┌─└────────────┼─────>000142fc: 14000001 b 14300 <stage2_map_set_prot_attr+0x2cc> <- 000142f8(b)<stage2_map_set_prot_attr+0x2c8> │ │ │ │ stage2_map_set_prot_attr:470.10 (pgtable.c) sbepe attr |= ║FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ └──────────────┼─────>00014300: b9401fe8 ldr w8, [sp, #28] <- 000142fc(b)<stage2_map_set_prot_attr+0x2cc> ~ 00014304: 53185d08 lsl w8, w8, #8 ~ 00014308: 2a0803e0 mov w0, w8 ~ 0001430c: 92780409 and x9, x0, #0x300 ~ 00014310: f9000be9 str x9, [sp, #16] ~ 00014314: f9400be9 ldr x9, [sp, #16] stage2_map_set_prot_attr:470.7 (pgtable.c) sbepe attr ║|= FIELD_PREP(KVM_PTE_LEAF_ATTR_LO_S2_SH, sh); ~ 00014318: f94023ea ldr x10, [sp, #64] ~ 0001431c: aa090149 orr x9, x10, x9 ~ 00014320: f90023e9 str x9, [sp, #64] stage2_map_set_prot_attr:471.7 (pgtable.c) Sbepe attr ║|= KVM_PTE_LEAF_ATTR_LO_S2_AF; ~ 00014324: f94023e9 ldr x9, [sp, #64] ~ 00014328: b2760129 orr x9, x9, #0x400 ~ 0001432c: f90023e9 str x9, [sp, #64] stage2_map_set_prot_attr:472.15 (pgtable.c) Sbepe data->attr = ║attr; ~ 00014330: f94023e9 ldr x9, [sp, #64] stage2_map_set_prot_attr:472.2 (pgtable.c) sbepe ║data->attr = attr; ~ 00014334: f9402bea ldr x10, [sp, #80] stage2_map_set_prot_attr:472.13 (pgtable.c) sbepe data->attr ║= attr; ~ 00014338: f9000549 str x9, [x10, #8] ~ 0001433c: 2a1f03e8 mov w8, wzr stage2_map_set_prot_attr:473.2 (pgtable.c) Sbepe ║return 0; ~ 00014340: b9005fe8 str w8, [sp, #92] ~ │ ┌─00014344: 14000001 b 14348 <stage2_map_set_prot_attr+0x314> │ │ │ │ stage2_map_set_prot_attr:474.1 (pgtable.c) Sbepe ║} ~ └───>└>00014348: b9405fe0 ldr w0, [sp, #92] <- 00014298(b)<stage2_map_set_prot_attr+0x314>,00014344(b)<stage2_map_set_prot_attr+0x314> ~ 0001434c: 910343ff add sp, sp, #0xd0 00014038 CFA:r31+208 ~ 00014350: d65f03c0 ret -prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x14034 0x14354 (DW_OP_fbreg 0x58) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:451 -data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x14034 0x14354 (DW_OP_fbreg 0x50) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:452 -device var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14034 0x14354 (DW_OP_fbreg 0x4c) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:454 -attr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14034 0x14354 (DW_OP_fbreg 0x40) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:455 -sh var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14034 0x14354 (DW_OP_fbreg 0x1c) stage2_map_set_prot_attr:arch/arm64/kvm/hyp/nvhe/../pgtable.c:457 **00014354 <kvm_pgtable_stage2_unmap>: + kvm_pgtable_stage2_unmap params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14354 0x143a8 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_fbreg -0x10) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_breg31 0x18) kvm_pgtable_stage2_unmap:715.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14354 0x143a8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_breg31 0x18) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14354 0x143a8 (DW_OP_breg31 0x0) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:716 ~ 00014354: d10103ff sub sp, sp, #0x40 <- 0000c1b8(bl)<kvm_pgtable_stage2_unmap>,0000c1e8(bl)<kvm_pgtable_stage2_unmap> ~ 00014358: a9037bfd stp x29, x30, [sp, #48] 00014354 CFA:r31 r29:u r30:u ~ 0001435c: 9100c3fd add x29, sp, #0x30 ~ 00014360: f81f83a0 stur x0, [x29, #-8] ~ 00014364: f81f03a1 stur x1, [x29, #-16] ~ 00014368: f9000fe2 str x2, [sp, #24] kvm_pgtable_stage2_unmap:716.37 (pgtable.c) SbePe struct kvm_pgtable_walker walker = { ~ 0001436c: 90000008 adrp x8, 14000 <stage2_map_walker+0xac> ~ 00014370: 910ea108 add x8, x8, #0x3a8 ~ 00014374: f90003e8 str x8, [sp] kvm_pgtable_stage2_unmap:718.10 (pgtable.c) Sbepe .arg = ║pgt, ~ 00014378: f85f83a8 ldur x8, [x29, #-8] kvm_pgtable_stage2_unmap:716.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 0001437c: f90007e8 str x8, [sp, #8] ~ 00014380: 528000a9 mov w9, #0x5 // #5 ~ 00014384: b90013e9 str w9, [sp, #16] kvm_pgtable_stage2_unmap:722.26 (pgtable.c) Sbepe return kvm_pgtable_walk(║pgt, addr, size, &walker); ~ 00014388: f85f83a0 ldur x0, [x29, #-8] kvm_pgtable_stage2_unmap:722.31 (pgtable.c) sbepe return kvm_pgtable_walk(pgt, ║addr, size, &walker); ~ 0001438c: f85f03a1 ldur x1, [x29, #-16] kvm_pgtable_stage2_unmap:722.37 (pgtable.c) sbepe return kvm_pgtable_walk(pgt, addr, ║size, &walker); ~ 00014390: f9400fe2 ldr x2, [sp, #24] ~ 00014394: 910003e3 mov x3, sp kvm_pgtable_stage2_unmap:722.9 (pgtable.c) sbepe return ║kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00014398: 97fffcf8 bl 13778 <kvm_pgtable_walk> kvm_pgtable_stage2_unmap:722.2 (pgtable.c) sbepe ║return kvm_pgtable_walk(pgt, addr, size, &walker); ~ 0001439c: a9437bfd ldp x29, x30, [sp, #48] <- 00014398(bl-succ)<return> ~ 000143a0: 910103ff add sp, sp, #0x40 00014360 CFA:r29+16 r29:c-16 r30:c-8 ~ 000143a4: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14354 0x143a8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14354 0x143a8 (DW_OP_breg31 0x18) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:714 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14354 0x143a8 (DW_OP_breg31 0x0) kvm_pgtable_stage2_unmap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:716 **000143a8 <stage2_unmap_walker>: + stage2_unmap_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x143a8 0x14538 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x143a8 0x14538 (DW_OP_fbreg -0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x143a8 0x14538 (DW_OP_fbreg -0x2c) +arg param const(pointer(no type)) 0x143a8 0x14538 (DW_OP_fbreg -0x38) stage2_unmap_walker:675.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x10) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x18) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x143a8 0x14538 (DW_OP_fbreg -0x1c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x143a8 0x14538 (DW_OP_fbreg -0x28) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x143a8 0x14538 (DW_OP_fbreg -0x2c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:673 +arg param const(pointer(no type)) 0x143a8 0x14538 (DW_OP_fbreg -0x38) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:674 +pgt var pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x143a8 0x14538 (DW_OP_breg31 0x40) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:676 +mmu var pointer(struct kvm_s2_mmu<d70f1>/<d8ffa>) 0x143a8 0x14538 (DW_OP_breg31 0x38) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:677 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x143a8 0x14538 (DW_OP_breg31 0x30) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:678 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x143a8 0x14538 (DW_OP_breg31 0x28) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:679 +childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x143a8 0x14538 (DW_OP_breg31 0x20) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:679 +need_flush var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x143a8 0x14538 (DW_OP_breg31 0x1c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:680 ~ 000143a8: d10243ff sub sp, sp, #0x90 ~ 000143ac: a9087bfd stp x29, x30, [sp, #128] 000143a8 CFA:r31 r29:u r30:u ~ 000143b0: 910203fd add x29, sp, #0x80 ~ 000143b4: f81f03a0 stur x0, [x29, #-16] ~ 000143b8: f81e83a1 stur x1, [x29, #-24] ~ 000143bc: b81e43a2 stur w2, [x29, #-28] ~ 000143c0: f81d83a3 stur x3, [x29, #-40] ~ 000143c4: b81d43a4 stur w4, [x29, #-44] ~ 000143c8: f81c83a5 stur x5, [x29, #-56] stage2_unmap_walker:676.28 (pgtable.c) SbePe struct kvm_pgtable *pgt = ║arg; ~ 000143cc: f85c83a8 ldur x8, [x29, #-56] stage2_unmap_walker:676.22 (pgtable.c) sbepe struct kvm_pgtable *║pgt = arg; ~ 000143d0: f90023e8 str x8, [sp, #64] stage2_unmap_walker:677.27 (pgtable.c) Sbepe struct kvm_s2_mmu *mmu = ║pgt->mmu; ~ 000143d4: f94023e8 ldr x8, [sp, #64] stage2_unmap_walker:677.32 (pgtable.c) sbepe struct kvm_s2_mmu *mmu = pgt->║mmu; ~ 000143d8: f9400d08 ldr x8, [x8, #24] stage2_unmap_walker:677.21 (pgtable.c) sbepe struct kvm_s2_mmu *║mmu = pgt->mmu; ~ 000143dc: f9001fe8 str x8, [sp, #56] stage2_unmap_walker:678.38 (pgtable.c) Sbepe struct kvm_pgtable_mm_ops *mm_ops = ║pgt->mm_ops; ~ 000143e0: f94023e8 ldr x8, [sp, #64] stage2_unmap_walker:678.43 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *mm_ops = pgt->║mm_ops; ~ 000143e4: f9400908 ldr x8, [x8, #16] stage2_unmap_walker:678.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = pgt->mm_ops; ~ 000143e8: f9001be8 str x8, [sp, #48] stage2_unmap_walker:679.19 (pgtable.c) Sbepe kvm_pte_t pte = *║ptep, *childp = NULL; ~ 000143ec: f85d83a8 ldur x8, [x29, #-40] stage2_unmap_walker:679.18 (pgtable.c) sbepe kvm_pte_t pte = ║*ptep, *childp = NULL; ~ 000143f0: f9400108 ldr x8, [x8] stage2_unmap_walker:679.12 (pgtable.c) sbepe kvm_pte_t ║pte = *ptep, *childp = NULL; ~ 000143f4: f90017e8 str x8, [sp, #40] ~ 000143f8: aa1f03e8 mov x8, xzr stage2_unmap_walker:679.26 (pgtable.c) sbepe kvm_pte_t pte = *ptep, *║childp = NULL; ~ 000143fc: f90013e8 str x8, [sp, #32] ~ 00014400: 2a1f03e9 mov w9, wzr stage2_unmap_walker:680.7 (pgtable.c) Sbepe bool ║need_flush = false; ~ 00014404: 390073e9 strb w9, [sp, #28] stage2_unmap_walker:682.21 (pgtable.c) Sbepe if (!kvm_pte_valid(║pte)) ~ 00014408: f94017e0 ldr x0, [sp, #40] stage2_unmap_walker:682.7 (pgtable.c) sbepe if (!║kvm_pte_valid(pte)) ~ 0001440c: 940003ac bl 152bc <kvm_pte_valid> stage2_unmap_walker:682.6 (pgtable.c) sbepe if (║!kvm_pte_valid(pte)) ~ ┌──00014410: 370000a0 tbnz w0, #0, 14424 <stage2_unmap_walker+0x7c> <- 0001440c(bl-succ)<return> ~ │┌─00014414: 14000001 b 14418 <stage2_unmap_walker+0x70> <- 00014410(b.cc-succ)<fallthrough> ││ ~ │└>00014418: 2a1f03e8 mov w8, wzr <- 00014414(b)<stage2_unmap_walker+0x70> stage2_unmap_walker:683.3 (pgtable.c) Sbepe ║return 0; ~ 0001441c: b81fc3a8 stur w8, [x29, #-4] ~ ┌──────┼──00014420: 14000042 b 14528 <stage2_unmap_walker+0x180> │ │ │ │ stage2_unmap_walker:685.20 (pgtable.c) Sbepe if (kvm_pte_table(║pte, level)) { ~ │ └─>00014424: f94017e0 ldr x0, [sp, #40] <- 00014410(b.cc)<stage2_unmap_walker+0x7c> stage2_unmap_walker:685.25 (pgtable.c) sbepe if (kvm_pte_table(pte, ║level)) { ~ 00014428: b85e43a1 ldur w1, [x29, #-28] stage2_unmap_walker:685.6 (pgtable.c) sbepe if (║kvm_pte_table(pte, level)) { ~ 0001442c: 94000348 bl 1514c <kvm_pte_table> stage2_unmap_walker:685.6 (pgtable.c) sbepe if (║kvm_pte_table(pte, level)) { ~ │ ┌───00014430: 36000220 tbz w0, #0, 14474 <stage2_unmap_walker+0xcc> <- 0001442c(bl-succ)<return> │ │ ~ │ │ ┌─00014434: 14000001 b 14438 <stage2_unmap_walker+0x90> <- 00014430(b.cc-succ)<fallthrough> │ │ │ │ │ │ stage2_unmap_walker:686.27 (pgtable.c) Sbepe childp = kvm_pte_follow(║pte, mm_ops); ~ │ │ └>00014438: f94017e0 ldr x0, [sp, #40] <- 00014434(b)<stage2_unmap_walker+0x90> │ │ stage2_unmap_walker:686.32 (pgtable.c) sbepe childp = kvm_pte_follow(pte, ║mm_ops); ~ │ │ 0001443c: f9401be1 ldr x1, [sp, #48] │ │ stage2_unmap_walker:686.12 (pgtable.c) sbepe childp = ║kvm_pte_follow(pte, mm_ops); ~ │ │ 00014440: 94000390 bl 15280 <kvm_pte_follow> │ │ │ │ stage2_unmap_walker:686.10 (pgtable.c) sbepe childp ║= kvm_pte_follow(pte, mm_ops); ~ │ │ 00014444: f90013e0 str x0, [sp, #32] <- 00014440(bl-succ)<return> │ │ stage2_unmap_walker:688.7 (pgtable.c) Sbepe if (║mm_ops->page_count(childp) != 1) ~ │ │ 00014448: f9401be8 ldr x8, [sp, #48] │ │ stage2_unmap_walker:688.15 (pgtable.c) sbepe if (mm_ops->║page_count(childp) != 1) ~ │ │ 0001444c: f9401508 ldr x8, [x8, #40] │ │ stage2_unmap_walker:688.26 (pgtable.c) sbepe if (mm_ops->page_count(║childp) != 1) ~ │ │ 00014450: f94013e0 ldr x0, [sp, #32] │ │ stage2_unmap_walker:688.7 (pgtable.c) sbepe if (║mm_ops->page_count(childp) != 1) ~ │ │ 00014454: d63f0100 blr x8 │ │ stage2_unmap_walker:688.7 (pgtable.c) sbepe if (║mm_ops->page_count(childp) != 1) ~ │ │ 00014458: 71000409 subs w9, w0, #0x1 ~ │ │┌──0001445c: 540000a0 b.eq 14470 <stage2_unmap_walker+0xc8> // b.none │ ││ ~ │ ││┌─00014460: 14000001 b 14464 <stage2_unmap_walker+0xbc> <- 0001445c(b.cc-succ)<fallthrough> │ │││ ~ │ ││└>00014464: 2a1f03e8 mov w8, wzr <- 00014460(b)<stage2_unmap_walker+0xbc> │ ││ stage2_unmap_walker:689.4 (pgtable.c) Sbepe ║return 0; ~ │ ││ 00014468: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌───┼┼──0001446c: 1400002f b 14528 <stage2_unmap_walker+0x180> │ │ ││ │ │ ││ stage2_unmap_walker:690.2 (pgtable.c) Sbepe ║} else if (stage2_pte_cacheable(pte)) { ~ │ │┌──┼└─>00014470: 14000009 b 14494 <stage2_unmap_walker+0xec> <- 0001445c(b.cc)<stage2_unmap_walker+0xc8> │ ││ │ │ ││ │ stage2_unmap_walker:690.34 (pgtable.c) sbepe } else if (stage2_pte_cacheable(║pte)) { ~ │ ││ └──>00014474: f94017e0 ldr x0, [sp, #40] <- 00014430(b.cc)<stage2_unmap_walker+0xcc> │ ││ stage2_unmap_walker:690.13 (pgtable.c) sbepe } else if (║stage2_pte_cacheable(pte)) { ~ │ ││ 00014478: 940005ce bl 15bb0 <stage2_pte_cacheable> │ ││ │ ││ stage2_unmap_walker:690.13 (pgtable.c) sbepe } else if (║stage2_pte_cacheable(pte)) { ~ │ ││┌─────0001447c: 360000a0 tbz w0, #0, 14490 <stage2_unmap_walker+0xe8> <- 00014478(bl-succ)<return> │ │││ ~ │ │││ ┌─00014480: 14000001 b 14484 <stage2_unmap_walker+0xdc> <- 0001447c(b.cc-succ)<fallthrough> │ │││ │ ~ │ │││ └>00014484: 52800028 mov w8, #0x1 // #1 <- 00014480(b)<stage2_unmap_walker+0xdc> │ │││ stage2_unmap_walker:691.14 (pgtable.c) Sbepe need_flush ║= true; ~ │ │││ 00014488: 390073e8 strb w8, [sp, #28] │ │││ stage2_unmap_walker:692.2 (pgtable.c) Sbepe } ~ │ │││ ┌─0001448c: 14000001 b 14490 <stage2_unmap_walker+0xe8> │ │││ │ ~ │ ││└>┌─└>00014490: 14000001 b 14494 <stage2_unmap_walker+0xec> <- 0001447c(b.cc)<stage2_unmap_walker+0xe8>,0001448c(b)<stage2_unmap_walker+0xe8> │ ││ │ │ ││ │ stage2_unmap_walker:699.22 (pgtable.c) Sbepe kvm_set_invalid_pte(║ptep); ~ │ │└─>└──>00014494: f85d83a0 ldur x0, [x29, #-40] <- 00014470(b)<stage2_unmap_walker+0xec>,00014490(b)<stage2_unmap_walker+0xec> │ │ stage2_unmap_walker:699.2 (pgtable.c) sbepe ║kvm_set_invalid_pte(ptep); ~ │ │ 00014498: 9400056d bl 15a4c <kvm_set_invalid_pte> │ │ │ │ stage2_unmap_walker:700.2 (pgtable.c) Sbepe ║kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu, addr, level); ~ │ │ 0001449c: f9401fe0 ldr x0, [sp, #56] <- 00014498(bl-succ)<return> ~ │ │ 000144a0: f85f03a1 ldur x1, [x29, #-16] ~ │ │ 000144a4: b85e43a2 ldur w2, [x29, #-28] ~ │ │ 000144a8: 97ffc283 bl 4eb4 <__kvm_tlb_flush_vmid_ipa> │ │ │ │ stage2_unmap_walker:701.2 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ │ │ 000144ac: f9401be8 ldr x8, [sp, #48] <- 000144a8(bl-succ)<return> │ │ stage2_unmap_walker:701.10 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ │ │ 000144b0: f9401108 ldr x8, [x8, #32] │ │ stage2_unmap_walker:701.19 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ │ │ 000144b4: f85d83a0 ldur x0, [x29, #-40] │ │ stage2_unmap_walker:701.2 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ │ │ 000144b8: d63f0100 blr x8 │ │ stage2_unmap_walker:703.6 (pgtable.c) Sbepe if (║need_flush) { ~ │ │ 000144bc: 394073e9 ldrb w9, [sp, #28] │ │ stage2_unmap_walker:703.6 (pgtable.c) sbepe if (║need_flush) { ~ │ │ ┌───000144c0: 360001e9 tbz w9, #0, 144fc <stage2_unmap_walker+0x154> │ │ │ ~ │ │ │ ┌─000144c4: 14000001 b 144c8 <stage2_unmap_walker+0x120> <- 000144c0(b.cc-succ)<fallthrough> │ │ │ │ │ │ │ │ stage2_unmap_walker:704.38 (pgtable.c) Sbepe stage2_flush_dcache(kvm_pte_follow(║pte, mm_ops), ~ │ │ │ └>000144c8: f94017e0 ldr x0, [sp, #40] <- 000144c4(b)<stage2_unmap_walker+0x120> │ │ │ stage2_unmap_walker:704.43 (pgtable.c) sbepe stage2_flush_dcache(kvm_pte_follow(pte, ║mm_ops), ~ │ │ │ 000144cc: f9401be1 ldr x1, [sp, #48] │ │ │ stage2_unmap_walker:704.23 (pgtable.c) sbepe stage2_flush_dcache(║kvm_pte_follow(pte, mm_ops), ~ │ │ │ 000144d0: 9400036c bl 15280 <kvm_pte_follow> │ │ │ │ │ │ stage2_unmap_walker:705.26 (pgtable.c) Sbepe kvm_granule_size(║level)); ~ │ │ │ 000144d4: b85e43a8 ldur w8, [x29, #-28] <- 000144d0(bl-succ)<return> ~ │ │ │ 000144d8: f9000be0 str x0, [sp, #16] │ │ │ stage2_unmap_walker:705.9 (pgtable.c) sbepe ║kvm_granule_size(level)); ~ │ │ │ 000144dc: 2a0803e0 mov w0, w8 ~ │ │ │ 000144e0: 9400035c bl 15250 <kvm_granule_size> │ │ │ ~ │ │ │ 000144e4: f9400be1 ldr x1, [sp, #16] <- 000144e0(bl-succ)<return> ~ │ │ │ 000144e8: f90007e0 str x0, [sp, #8] │ │ │ stage2_unmap_walker:704.3 (pgtable.c) Sbepe ║stage2_flush_dcache(kvm_pte_follow(pte, mm_ops), ~ │ │ │ 000144ec: aa0103e0 mov x0, x1 ~ │ │ │ 000144f0: f94007e1 ldr x1, [sp, #8] ~ │ │ │ 000144f4: 940005f9 bl 15cd8 <stage2_flush_dcache> │ │ │ │ │ │ stage2_unmap_walker:706.2 (pgtable.c) Sbepe } ~ │ │ │ ┌─000144f8: 14000001 b 144fc <stage2_unmap_walker+0x154> <- 000144f4(bl-succ)<return> │ │ │ │ │ │ │ │ stage2_unmap_walker:708.6 (pgtable.c) Sbepe if (║childp) ~ │ │ └>└>000144fc: f94013e8 ldr x8, [sp, #32] <- 000144c0(b.cc)<stage2_unmap_walker+0x154>,000144f8(b)<stage2_unmap_walker+0x154> │ │ stage2_unmap_walker:708.6 (pgtable.c) sbepe if (║childp) ~ │ │ ┌───00014500: b40000e8 cbz x8, 1451c <stage2_unmap_walker+0x174> │ │ │ ~ │ │ │ ┌─00014504: 14000001 b 14508 <stage2_unmap_walker+0x160> <- 00014500(b.cc-succ)<fallthrough> │ │ │ │ │ │ │ │ stage2_unmap_walker:709.3 (pgtable.c) Sbepe ║mm_ops->put_page(childp); ~ │ │ │ └>00014508: f9401be8 ldr x8, [sp, #48] <- 00014504(b)<stage2_unmap_walker+0x160> │ │ │ stage2_unmap_walker:709.11 (pgtable.c) sbepe mm_ops->║put_page(childp); ~ │ │ │ 0001450c: f9401108 ldr x8, [x8, #32] │ │ │ stage2_unmap_walker:709.20 (pgtable.c) sbepe mm_ops->put_page(║childp); ~ │ │ │ 00014510: f94013e0 ldr x0, [sp, #32] │ │ │ stage2_unmap_walker:709.3 (pgtable.c) sbepe ║mm_ops->put_page(childp); ~ │ │ │ 00014514: d63f0100 blr x8 ~ │ │ │ ┌─00014518: 14000001 b 1451c <stage2_unmap_walker+0x174> │ │ │ │ ~ │ │ └>└>0001451c: 2a1f03e8 mov w8, wzr <- 00014500(b.cc)<stage2_unmap_walker+0x174>,00014518(b)<stage2_unmap_walker+0x174> │ │ stage2_unmap_walker:711.2 (pgtable.c) Sbepe ║return 0; ~ │ │ 00014520: b81fc3a8 stur w8, [x29, #-4] ~ │ │ ┌─00014524: 14000001 b 14528 <stage2_unmap_walker+0x180> │ │ │ │ │ │ stage2_unmap_walker:712.1 (pgtable.c) Sbepe ║} ~ └>└────>└>00014528: b85fc3a0 ldur w0, [x29, #-4] <- 00014420(b)<stage2_unmap_walker+0x180>,0001446c(b)<stage2_unmap_walker+0x180>,00014524(b)<stage2_unmap_walker+0x180> ~ 0001452c: a9487bfd ldp x29, x30, [sp, #128] ~ 00014530: 910243ff add sp, sp, #0x90 000143b4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014534: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x10) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x143a8 0x14538 (DW_OP_fbreg -0x18) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x143a8 0x14538 (DW_OP_fbreg -0x1c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x143a8 0x14538 (DW_OP_fbreg -0x28) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:672 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x143a8 0x14538 (DW_OP_fbreg -0x2c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:673 -arg param const(pointer(no type)) 0x143a8 0x14538 (DW_OP_fbreg -0x38) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:674 -pgt var pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x143a8 0x14538 (DW_OP_breg31 0x40) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:676 -mmu var pointer(struct kvm_s2_mmu<d70f1>/<d8ffa>) 0x143a8 0x14538 (DW_OP_breg31 0x38) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:677 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x143a8 0x14538 (DW_OP_breg31 0x30) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:678 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x143a8 0x14538 (DW_OP_breg31 0x28) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:679 -childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x143a8 0x14538 (DW_OP_breg31 0x20) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:679 -need_flush var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x143a8 0x14538 (DW_OP_breg31 0x1c) stage2_unmap_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:680 **00014538 <kvm_pgtable_stage2_wrprotect>: + kvm_pgtable_stage2_wrprotect params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14538 0x14584 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x10) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x8) kvm_pgtable_stage2_wrprotect:788.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14538 0x14584 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x10) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x8) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 ~ 00014538: d100c3ff sub sp, sp, #0x30 ~ 0001453c: a9027bfd stp x29, x30, [sp, #32] 00014538 CFA:r31 r29:u r30:u ~ 00014540: 910083fd add x29, sp, #0x20 ~ 00014544: f81f83a0 stur x0, [x29, #-8] ~ 00014548: f9000be1 str x1, [sp, #16] ~ 0001454c: f90007e2 str x2, [sp, #8] kvm_pgtable_stage2_wrprotect:789.34 (pgtable.c) SbePe return stage2_update_leaf_attrs(║pgt, addr, size, 0, ~ 00014550: f85f83a0 ldur x0, [x29, #-8] kvm_pgtable_stage2_wrprotect:789.39 (pgtable.c) sbepe return stage2_update_leaf_attrs(pgt, ║addr, size, 0, ~ 00014554: f9400be1 ldr x1, [sp, #16] kvm_pgtable_stage2_wrprotect:789.45 (pgtable.c) sbepe return stage2_update_leaf_attrs(pgt, addr, ║size, 0, ~ 00014558: f94007e2 ldr x2, [sp, #8] ~ 0001455c: 52801008 mov w8, #0x80 // #128 ~ 00014560: 2a0803e4 mov w4, w8 ~ 00014564: aa1f03e3 mov x3, xzr ~ 00014568: f90003e3 str x3, [sp] ~ 0001456c: f94003e5 ldr x5, [sp] ~ 00014570: f94003e6 ldr x6, [sp] kvm_pgtable_stage2_wrprotect:789.9 (pgtable.c) sbepe return ║stage2_update_leaf_attrs(pgt, addr, size, 0, ~ 00014574: 94000004 bl 14584 <stage2_update_leaf_attrs> kvm_pgtable_stage2_wrprotect:789.2 (pgtable.c) sbepe ║return stage2_update_leaf_attrs(pgt, addr, size, 0, ~ 00014578: a9427bfd ldp x29, x30, [sp, #32] <- 00014574(bl-succ)<return> ~ 0001457c: 9100c3ff add sp, sp, #0x30 00014544 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014580: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14538 0x14584 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x10) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14538 0x14584 (DW_OP_breg31 0x8) kvm_pgtable_stage2_wrprotect:arch/arm64/kvm/hyp/nvhe/../pgtable.c:787 **00014584 <stage2_update_leaf_attrs>: + stage2_update_leaf_attrs params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14584 0x14688 (DW_OP_fbreg -0x10) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x18) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x20) +attr_set param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x28) +attr_clr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x30) +orig_pte param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14584 0x14688 (DW_OP_fbreg -0x38) +level param pointer(typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4)))) 0x14584 0x14688 (DW_OP_fbreg -0x40) stage2_update_leaf_attrs:762.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14584 0x14688 (DW_OP_fbreg -0x10) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:758 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x18) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:758 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x20) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:759 +attr_set param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x28) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:759 +attr_clr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x30) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:760 +orig_pte param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14584 0x14688 (DW_OP_fbreg -0x38) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:760 +level param pointer(typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4)))) 0x14584 0x14688 (DW_OP_fbreg -0x40) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:761 +ret var int (base type, DW_ATE_signed size:4) 0x14584 0x14688 (DW_OP_fbreg -0x44) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:763 +attr_mask var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_breg31 0x40) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:764 +data var struct stage2_attr_data<d70f1>/<e71d6> 0x14584 0x14688 (DW_OP_breg31 0x20) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:765 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14584 0x14688 (DW_OP_breg31 0x8) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:769 ~ 00014584: d10283ff sub sp, sp, #0xa0 <- 00014574(bl)<stage2_update_leaf_attrs>,000146c8(bl)<stage2_update_leaf_attrs>,00014728(bl)<stage2_update_leaf_attrs>,00014780(bl)<stage2_update_leaf_attrs>,00014838(bl)<stage2_update_leaf_attrs> ~ 00014588: a9097bfd stp x29, x30, [sp, #144] 00014584 CFA:r31 r29:u r30:u ~ 0001458c: 910243fd add x29, sp, #0x90 ~ 00014590: f81f03a0 stur x0, [x29, #-16] ~ 00014594: f81e83a1 stur x1, [x29, #-24] ~ 00014598: f81e03a2 stur x2, [x29, #-32] ~ 0001459c: f81d83a3 stur x3, [x29, #-40] ~ 000145a0: f81d03a4 stur x4, [x29, #-48] ~ 000145a4: f81c83a5 stur x5, [x29, #-56] ~ 000145a8: f81c03a6 stur x6, [x29, #-64] ~ 000145ac: d281ff88 mov x8, #0xffc // #4092 ~ 000145b0: f2ffff08 movk x8, #0xfff8, lsl #48 stage2_update_leaf_attrs:764.12 (pgtable.c) SbePe kvm_pte_t ║attr_mask = KVM_PTE_LEAF_ATTR_LO | KVM_PTE_LEAF_ATTR_HI; ~ 000145b4: f90023e8 str x8, [sp, #64] stage2_update_leaf_attrs:766.15 (pgtable.c) Sbepe .attr_set = ║attr_set & attr_mask, ~ 000145b8: f85d83a8 ldur x8, [x29, #-40] stage2_update_leaf_attrs:766.26 (pgtable.c) sbepe .attr_set = attr_set & ║attr_mask, ~ 000145bc: f94023e9 ldr x9, [sp, #64] stage2_update_leaf_attrs:766.24 (pgtable.c) sbepe .attr_set = attr_set ║& attr_mask, ~ 000145c0: 8a090108 and x8, x8, x9 stage2_update_leaf_attrs:765.33 (pgtable.c) Sbepe struct stage2_attr_data data = { ~ 000145c4: f90013e8 str x8, [sp, #32] stage2_update_leaf_attrs:767.15 (pgtable.c) Sbepe .attr_clr = ║attr_clr & attr_mask, ~ 000145c8: f85d03a8 ldur x8, [x29, #-48] stage2_update_leaf_attrs:767.26 (pgtable.c) sbepe .attr_clr = attr_clr & ║attr_mask, ~ 000145cc: f94023e9 ldr x9, [sp, #64] stage2_update_leaf_attrs:767.24 (pgtable.c) sbepe .attr_clr = attr_clr ║& attr_mask, ~ 000145d0: 8a090108 and x8, x8, x9 stage2_update_leaf_attrs:765.33 (pgtable.c) Sbepe struct stage2_attr_data data = { ~ 000145d4: f90017e8 str x8, [sp, #40] ~ 000145d8: aa1f03e8 mov x8, xzr ~ 000145dc: f9001be8 str x8, [sp, #48] ~ 000145e0: 2a1f03ea mov w10, wzr ~ 000145e4: b9003bea str w10, [sp, #56] stage2_update_leaf_attrs:769.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 000145e8: b0000008 adrp x8, 15000 <__kvm_pgtable_visit+0x58> ~ 000145ec: 91376108 add x8, x8, #0xdd8 ~ 000145f0: f90007e8 str x8, [sp, #8] ~ 000145f4: 910083e8 add x8, sp, #0x20 ~ 000145f8: f9000be8 str x8, [sp, #16] ~ 000145fc: 5280002a mov w10, #0x1 // #1 ~ 00014600: b9001bea str w10, [sp, #24] stage2_update_leaf_attrs:775.25 (pgtable.c) Sbepe ret = kvm_pgtable_walk(║pgt, addr, size, &walker); ~ 00014604: f85f03a0 ldur x0, [x29, #-16] stage2_update_leaf_attrs:775.30 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, ║addr, size, &walker); ~ 00014608: f85e83a1 ldur x1, [x29, #-24] stage2_update_leaf_attrs:775.36 (pgtable.c) sbepe ret = kvm_pgtable_walk(pgt, addr, ║size, &walker); ~ 0001460c: f85e03a2 ldur x2, [x29, #-32] ~ 00014610: 910023e3 add x3, sp, #0x8 stage2_update_leaf_attrs:775.8 (pgtable.c) sbepe ret = ║kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00014614: 97fffc59 bl 13778 <kvm_pgtable_walk> stage2_update_leaf_attrs:775.6 (pgtable.c) sbepe ret ║= kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00014618: b81bc3a0 stur w0, [x29, #-68] <- 00014614(bl-succ)<return> stage2_update_leaf_attrs:776.6 (pgtable.c) Sbepe if (║ret) ~ 0001461c: b85bc3aa ldur w10, [x29, #-68] stage2_update_leaf_attrs:776.6 (pgtable.c) sbepe if (║ret) ~ ┌──00014620: 340000aa cbz w10, 14634 <stage2_update_leaf_attrs+0xb0> ~ │┌─00014624: 14000001 b 14628 <stage2_update_leaf_attrs+0xa4> <- 00014620(b.cc-succ)<fallthrough> ││ ││ stage2_update_leaf_attrs:777.10 (pgtable.c) Sbepe return ║ret; ~ │└>00014628: b85bc3a8 ldur w8, [x29, #-68] <- 00014624(b)<stage2_update_leaf_attrs+0xa4> stage2_update_leaf_attrs:777.3 (pgtable.c) sbepe ║return ret; ~ 0001462c: b81fc3a8 stur w8, [x29, #-4] ~ ┌─┼──00014630: 14000012 b 14678 <stage2_update_leaf_attrs+0xf4> │ │ │ │ stage2_update_leaf_attrs:779.6 (pgtable.c) Sbepe if (║orig_pte) ~ │ └─>00014634: f85c83a8 ldur x8, [x29, #-56] <- 00014620(b.cc)<stage2_update_leaf_attrs+0xb0> stage2_update_leaf_attrs:779.6 (pgtable.c) sbepe if (║orig_pte) ~ │┌───00014638: b40000c8 cbz x8, 14650 <stage2_update_leaf_attrs+0xcc> ││ ~ ││ ┌─0001463c: 14000001 b 14640 <stage2_update_leaf_attrs+0xbc> <- 00014638(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_update_leaf_attrs:780.20 (pgtable.c) Sbepe *orig_pte = data.║pte; ~ ││ └>00014640: f9401be8 ldr x8, [sp, #48] <- 0001463c(b)<stage2_update_leaf_attrs+0xbc> ││ stage2_update_leaf_attrs:780.4 (pgtable.c) sbepe *║orig_pte = data.pte; ~ ││ 00014644: f85c83a9 ldur x9, [x29, #-56] ││ stage2_update_leaf_attrs:780.13 (pgtable.c) sbepe *orig_pte ║= data.pte; ~ ││ 00014648: f9000128 str x8, [x9] ││ stage2_update_leaf_attrs:780.3 (pgtable.c) sbepe ║*orig_pte = data.pte; ~ ││ ┌─0001464c: 14000001 b 14650 <stage2_update_leaf_attrs+0xcc> ││ │ ││ │ stage2_update_leaf_attrs:782.6 (pgtable.c) Sbepe if (║level) ~ │└>└>00014650: f85c03a8 ldur x8, [x29, #-64] <- 00014638(b.cc)<stage2_update_leaf_attrs+0xcc>,0001464c(b)<stage2_update_leaf_attrs+0xcc> stage2_update_leaf_attrs:782.6 (pgtable.c) sbepe if (║level) ~ │┌───00014654: b40000c8 cbz x8, 1466c <stage2_update_leaf_attrs+0xe8> ││ ~ ││ ┌─00014658: 14000001 b 1465c <stage2_update_leaf_attrs+0xd8> <- 00014654(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_update_leaf_attrs:783.17 (pgtable.c) Sbepe *level = data.║level; ~ ││ └>0001465c: b9403be8 ldr w8, [sp, #56] <- 00014658(b)<stage2_update_leaf_attrs+0xd8> ││ stage2_update_leaf_attrs:783.4 (pgtable.c) sbepe *║level = data.level; ~ ││ 00014660: f85c03a9 ldur x9, [x29, #-64] ││ stage2_update_leaf_attrs:783.10 (pgtable.c) sbepe *level ║= data.level; ~ ││ 00014664: b9000128 str w8, [x9] ││ stage2_update_leaf_attrs:783.3 (pgtable.c) sbepe ║*level = data.level; ~ ││ ┌─00014668: 14000001 b 1466c <stage2_update_leaf_attrs+0xe8> ││ │ ~ │└>└>0001466c: 2a1f03e8 mov w8, wzr <- 00014654(b.cc)<stage2_update_leaf_attrs+0xe8>,00014668(b)<stage2_update_leaf_attrs+0xe8> stage2_update_leaf_attrs:784.2 (pgtable.c) Sbepe ║return 0; ~ 00014670: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00014674: 14000001 b 14678 <stage2_update_leaf_attrs+0xf4> │ │ │ │ stage2_update_leaf_attrs:785.1 (pgtable.c) Sbepe ║} ~ └─>└>00014678: b85fc3a0 ldur w0, [x29, #-4] <- 00014630(b)<stage2_update_leaf_attrs+0xf4>,00014674(b)<stage2_update_leaf_attrs+0xf4> ~ 0001467c: a9497bfd ldp x29, x30, [sp, #144] ~ 00014680: 910283ff add sp, sp, #0xa0 00014590 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014684: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14584 0x14688 (DW_OP_fbreg -0x10) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:758 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x18) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:758 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14584 0x14688 (DW_OP_fbreg -0x20) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:759 -attr_set param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x28) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:759 -attr_clr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_fbreg -0x30) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:760 -orig_pte param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14584 0x14688 (DW_OP_fbreg -0x38) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:760 -level param pointer(typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4)))) 0x14584 0x14688 (DW_OP_fbreg -0x40) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:761 -ret var int (base type, DW_ATE_signed size:4) 0x14584 0x14688 (DW_OP_fbreg -0x44) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:763 -attr_mask var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14584 0x14688 (DW_OP_breg31 0x40) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:764 -data var struct stage2_attr_data<d70f1>/<e71d6> 0x14584 0x14688 (DW_OP_breg31 0x20) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:765 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14584 0x14688 (DW_OP_breg31 0x8) stage2_update_leaf_attrs:arch/arm64/kvm/hyp/nvhe/../pgtable.c:769 **00014688 <kvm_pgtable_stage2_mkyoung>: + kvm_pgtable_stage2_mkyoung params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14688 0x146e8 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14688 0x146e8 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkyoung:795.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14688 0x146e8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:794 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14688 0x146e8 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:794 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14688 0x146e8 (DW_OP_breg31 0x8) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:796 ~ 00014688: d100c3ff sub sp, sp, #0x30 ~ 0001468c: a9027bfd stp x29, x30, [sp, #32] 00014688 CFA:r31 r29:u r30:u ~ 00014690: 910083fd add x29, sp, #0x20 ~ 00014694: f81f83a0 stur x0, [x29, #-8] ~ 00014698: f9000be1 str x1, [sp, #16] ~ 0001469c: aa1f03e8 mov x8, xzr kvm_pgtable_stage2_mkyoung:796.12 (pgtable.c) SbePe kvm_pte_t ║pte = 0; ~ 000146a0: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_mkyoung:797.27 (pgtable.c) Sbepe stage2_update_leaf_attrs(║pgt, addr, 1, KVM_PTE_LEAF_ATTR_LO_S2_AF, 0, ~ 000146a4: f85f83a0 ldur x0, [x29, #-8] kvm_pgtable_stage2_mkyoung:797.32 (pgtable.c) sbepe stage2_update_leaf_attrs(pgt, ║addr, 1, KVM_PTE_LEAF_ATTR_LO_S2_AF, 0, ~ 000146a8: f9400be1 ldr x1, [sp, #16] ~ 000146ac: 52800029 mov w9, #0x1 // #1 ~ 000146b0: 2a0903e2 mov w2, w9 ~ 000146b4: 52808009 mov w9, #0x400 // #1024 ~ 000146b8: 2a0903e3 mov w3, w9 ~ 000146bc: 910023e5 add x5, sp, #0x8 kvm_pgtable_stage2_mkyoung:797.2 (pgtable.c) sbepe ║stage2_update_leaf_attrs(pgt, addr, 1, KVM_PTE_LEAF_ATTR_LO_S2_AF, 0, ~ 000146c0: aa0803e4 mov x4, x8 ~ 000146c4: aa0803e6 mov x6, x8 ~ 000146c8: 97ffffaf bl 14584 <stage2_update_leaf_attrs> kvm_pgtable_stage2_mkyoung:799.2 (pgtable.c) Sbepe ║dsb(ishst); ~ 000146cc: d5033a9f dsb ishst <- 000146c8(bl-succ)<return> kvm_pgtable_stage2_mkyoung:800.9 (pgtable.c) Sbepe return ║pte; ~ 000146d0: f94007e8 ldr x8, [sp, #8] ~ 000146d4: b90007e0 str w0, [sp, #4] kvm_pgtable_stage2_mkyoung:800.2 (pgtable.c) sbepe ║return pte; ~ 000146d8: aa0803e0 mov x0, x8 ~ 000146dc: a9427bfd ldp x29, x30, [sp, #32] ~ 000146e0: 9100c3ff add sp, sp, #0x30 00014694 CFA:r29+16 r29:c-16 r30:c-8 ~ 000146e4: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14688 0x146e8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:794 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14688 0x146e8 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:794 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14688 0x146e8 (DW_OP_breg31 0x8) kvm_pgtable_stage2_mkyoung:arch/arm64/kvm/hyp/nvhe/../pgtable.c:796 **000146e8 <kvm_pgtable_stage2_mkold>: + kvm_pgtable_stage2_mkold params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x146e8 0x14744 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x146e8 0x14744 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkold:804.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x146e8 0x14744 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:803 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x146e8 0x14744 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:803 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x146e8 0x14744 (DW_OP_breg31 0x8) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:805 ~ 000146e8: d100c3ff sub sp, sp, #0x30 ~ 000146ec: a9027bfd stp x29, x30, [sp, #32] 000146e8 CFA:r31 r29:u r30:u ~ 000146f0: 910083fd add x29, sp, #0x20 ~ 000146f4: f81f83a0 stur x0, [x29, #-8] ~ 000146f8: f9000be1 str x1, [sp, #16] ~ 000146fc: aa1f03e8 mov x8, xzr kvm_pgtable_stage2_mkold:805.12 (pgtable.c) SbePe kvm_pte_t ║pte = 0; ~ 00014700: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_mkold:806.27 (pgtable.c) Sbepe stage2_update_leaf_attrs(║pgt, addr, 1, 0, KVM_PTE_LEAF_ATTR_LO_S2_AF, ~ 00014704: f85f83a0 ldur x0, [x29, #-8] kvm_pgtable_stage2_mkold:806.32 (pgtable.c) sbepe stage2_update_leaf_attrs(pgt, ║addr, 1, 0, KVM_PTE_LEAF_ATTR_LO_S2_AF, ~ 00014708: f9400be1 ldr x1, [sp, #16] ~ 0001470c: 52800029 mov w9, #0x1 // #1 ~ 00014710: 2a0903e2 mov w2, w9 ~ 00014714: 52808009 mov w9, #0x400 // #1024 ~ 00014718: 2a0903e4 mov w4, w9 ~ 0001471c: 910023e5 add x5, sp, #0x8 kvm_pgtable_stage2_mkold:806.2 (pgtable.c) sbepe ║stage2_update_leaf_attrs(pgt, addr, 1, 0, KVM_PTE_LEAF_ATTR_LO_S2_AF, ~ 00014720: aa0803e3 mov x3, x8 ~ 00014724: aa0803e6 mov x6, x8 ~ 00014728: 97ffff97 bl 14584 <stage2_update_leaf_attrs> kvm_pgtable_stage2_mkold:814.9 (pgtable.c) Sbepe return ║pte; ~ 0001472c: f94007e8 ldr x8, [sp, #8] <- 00014728(bl-succ)<return> ~ 00014730: b90007e0 str w0, [sp, #4] kvm_pgtable_stage2_mkold:814.2 (pgtable.c) sbepe ║return pte; ~ 00014734: aa0803e0 mov x0, x8 ~ 00014738: a9427bfd ldp x29, x30, [sp, #32] ~ 0001473c: 9100c3ff add sp, sp, #0x30 000146f4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014740: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x146e8 0x14744 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:803 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x146e8 0x14744 (DW_OP_breg31 0x10) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:803 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x146e8 0x14744 (DW_OP_breg31 0x8) kvm_pgtable_stage2_mkold:arch/arm64/kvm/hyp/nvhe/../pgtable.c:805 **00014744 <kvm_pgtable_stage2_is_young>: + kvm_pgtable_stage2_is_young params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14744 0x147a0 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14744 0x147a0 (DW_OP_breg31 0x10) kvm_pgtable_stage2_is_young:818.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14744 0x147a0 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:817 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14744 0x147a0 (DW_OP_breg31 0x10) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:817 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14744 0x147a0 (DW_OP_breg31 0x8) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:819 ~ 00014744: d100c3ff sub sp, sp, #0x30 ~ 00014748: a9027bfd stp x29, x30, [sp, #32] 00014744 CFA:r31 r29:u r30:u ~ 0001474c: 910083fd add x29, sp, #0x20 ~ 00014750: f81f83a0 stur x0, [x29, #-8] ~ 00014754: f9000be1 str x1, [sp, #16] ~ 00014758: aa1f03e8 mov x8, xzr kvm_pgtable_stage2_is_young:819.12 (pgtable.c) SbePe kvm_pte_t ║pte = 0; ~ 0001475c: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_is_young:820.27 (pgtable.c) Sbepe stage2_update_leaf_attrs(║pgt, addr, 1, 0, 0, &pte, NULL); ~ 00014760: f85f83a0 ldur x0, [x29, #-8] kvm_pgtable_stage2_is_young:820.32 (pgtable.c) sbepe stage2_update_leaf_attrs(pgt, ║addr, 1, 0, 0, &pte, NULL); ~ 00014764: f9400be1 ldr x1, [sp, #16] ~ 00014768: 52800029 mov w9, #0x1 // #1 ~ 0001476c: 2a0903e2 mov w2, w9 ~ 00014770: 910023e5 add x5, sp, #0x8 kvm_pgtable_stage2_is_young:820.2 (pgtable.c) sbepe ║stage2_update_leaf_attrs(pgt, addr, 1, 0, 0, &pte, NULL); ~ 00014774: aa0803e3 mov x3, x8 ~ 00014778: aa0803e4 mov x4, x8 ~ 0001477c: aa0803e6 mov x6, x8 ~ 00014780: 97ffff81 bl 14584 <stage2_update_leaf_attrs> kvm_pgtable_stage2_is_young:821.9 (pgtable.c) Sbepe return ║pte & KVM_PTE_LEAF_ATTR_LO_S2_AF; ~ 00014784: 394027e9 ldrb w9, [sp, #9] <- 00014780(bl-succ)<return> ~ 00014788: 53020929 ubfx w9, w9, #2, #1 ~ 0001478c: b90007e0 str w0, [sp, #4] kvm_pgtable_stage2_is_young:821.2 (pgtable.c) sbepe ║return pte & KVM_PTE_LEAF_ATTR_LO_S2_AF; ~ 00014790: 2a0903e0 mov w0, w9 ~ 00014794: a9427bfd ldp x29, x30, [sp, #32] ~ 00014798: 9100c3ff add sp, sp, #0x30 00014750 CFA:r29+16 r29:c-16 r30:c-8 ~ 0001479c: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14744 0x147a0 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:817 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14744 0x147a0 (DW_OP_breg31 0x10) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:817 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14744 0x147a0 (DW_OP_breg31 0x8) kvm_pgtable_stage2_is_young:arch/arm64/kvm/hyp/nvhe/../pgtable.c:819 **000147a0 <kvm_pgtable_stage2_relax_perms>: + kvm_pgtable_stage2_relax_perms params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x147a0 0x14874 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x147a0 0x14874 (DW_OP_fbreg -0x10) +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x147a0 0x14874 (DW_OP_fbreg -0x14) kvm_pgtable_stage2_relax_perms:826.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x147a0 0x14874 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:824 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x147a0 0x14874 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:824 +prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x147a0 0x14874 (DW_OP_fbreg -0x14) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:825 +ret var int (base type, DW_ATE_signed size:4) 0x147a0 0x14874 (DW_OP_breg31 0x18) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:827 +level var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x147a0 0x14874 (DW_OP_breg31 0x14) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:828 +set var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x147a0 0x14874 (DW_OP_breg31 0x8) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:829 +clr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x147a0 0x14874 (DW_OP_breg31 0x0) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:829 ~ 000147a0: d10103ff sub sp, sp, #0x40 ~ 000147a4: a9037bfd stp x29, x30, [sp, #48] 000147a0 CFA:r31 r29:u r30:u ~ 000147a8: 9100c3fd add x29, sp, #0x30 ~ 000147ac: f81f83a0 stur x0, [x29, #-8] ~ 000147b0: f81f03a1 stur x1, [x29, #-16] ~ 000147b4: b81ec3a2 stur w2, [x29, #-20] ~ 000147b8: aa1f03e8 mov x8, xzr kvm_pgtable_stage2_relax_perms:829.12 (pgtable.c) SbePe kvm_pte_t ║set = 0, clr = 0; ~ 000147bc: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_relax_perms:829.21 (pgtable.c) sbepe kvm_pte_t set = 0, ║clr = 0; ~ 000147c0: f90003e8 str x8, [sp] kvm_pgtable_stage2_relax_perms:831.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_R) ~ 000147c4: 385ec3a9 ldurb w9, [x29, #-20] ~ ┌───000147c8: 361000c9 tbz w9, #2, 147e0 <kvm_pgtable_stage2_relax_perms+0x40> ~ │ ┌─000147cc: 14000001 b 147d0 <kvm_pgtable_stage2_relax_perms+0x30> <- 000147c8(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_stage2_relax_perms:832.7 (pgtable.c) Sbepe set ║|= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R; ~ │ └>000147d0: f94007e8 ldr x8, [sp, #8] <- 000147cc(b)<kvm_pgtable_stage2_relax_perms+0x30> ~ 000147d4: b27a0108 orr x8, x8, #0x40 ~ 000147d8: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_relax_perms:832.3 (pgtable.c) sbepe ║set |= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R; ~ │ ┌─000147dc: 14000001 b 147e0 <kvm_pgtable_stage2_relax_perms+0x40> │ │ │ │ kvm_pgtable_stage2_relax_perms:834.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_W) ~ └>└>000147e0: 385ec3a8 ldurb w8, [x29, #-20] <- 000147c8(b.cc)<kvm_pgtable_stage2_relax_perms+0x40>,000147dc(b)<kvm_pgtable_stage2_relax_perms+0x40> ~ ┌───000147e4: 360800c8 tbz w8, #1, 147fc <kvm_pgtable_stage2_relax_perms+0x5c> ~ │ ┌─000147e8: 14000001 b 147ec <kvm_pgtable_stage2_relax_perms+0x4c> <- 000147e4(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_stage2_relax_perms:835.7 (pgtable.c) Sbepe set ║|= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W; ~ │ └>000147ec: f94007e8 ldr x8, [sp, #8] <- 000147e8(b)<kvm_pgtable_stage2_relax_perms+0x4c> ~ 000147f0: b2790108 orr x8, x8, #0x80 ~ 000147f4: f90007e8 str x8, [sp, #8] kvm_pgtable_stage2_relax_perms:835.3 (pgtable.c) sbepe ║set |= KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W; ~ │ ┌─000147f8: 14000001 b 147fc <kvm_pgtable_stage2_relax_perms+0x5c> │ │ │ │ kvm_pgtable_stage2_relax_perms:837.6 (pgtable.c) Sbepe if (║prot & KVM_PGTABLE_PROT_X) ~ └>└>000147fc: 385ec3a8 ldurb w8, [x29, #-20] <- 000147e4(b.cc)<kvm_pgtable_stage2_relax_perms+0x5c>,000147f8(b)<kvm_pgtable_stage2_relax_perms+0x5c> ~ ┌───00014800: 360000c8 tbz w8, #0, 14818 <kvm_pgtable_stage2_relax_perms+0x78> ~ │ ┌─00014804: 14000001 b 14808 <kvm_pgtable_stage2_relax_perms+0x68> <- 00014800(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_stage2_relax_perms:838.7 (pgtable.c) Sbepe clr ║|= KVM_PTE_LEAF_ATTR_HI_S2_XN; ~ │ └>00014808: f94003e8 ldr x8, [sp] <- 00014804(b)<kvm_pgtable_stage2_relax_perms+0x68> ~ 0001480c: b24a0108 orr x8, x8, #0x40000000000000 ~ 00014810: f90003e8 str x8, [sp] kvm_pgtable_stage2_relax_perms:838.3 (pgtable.c) sbepe ║clr |= KVM_PTE_LEAF_ATTR_HI_S2_XN; ~ │ ┌─00014814: 14000001 b 14818 <kvm_pgtable_stage2_relax_perms+0x78> │ │ │ │ kvm_pgtable_stage2_relax_perms:840.33 (pgtable.c) Sbepe ret = stage2_update_leaf_attrs(║pgt, addr, 1, set, clr, NULL, &level); ~ └>└>00014818: f85f83a0 ldur x0, [x29, #-8] <- 00014800(b.cc)<kvm_pgtable_stage2_relax_perms+0x78>,00014814(b)<kvm_pgtable_stage2_relax_perms+0x78> kvm_pgtable_stage2_relax_perms:840.38 (pgtable.c) sbepe ret = stage2_update_leaf_attrs(pgt, ║addr, 1, set, clr, NULL, &level); ~ 0001481c: f85f03a1 ldur x1, [x29, #-16] kvm_pgtable_stage2_relax_perms:840.47 (pgtable.c) sbepe ret = stage2_update_leaf_attrs(pgt, addr, 1, ║set, clr, NULL, &level); ~ 00014820: f94007e3 ldr x3, [sp, #8] kvm_pgtable_stage2_relax_perms:840.52 (pgtable.c) sbepe ret = stage2_update_leaf_attrs(pgt, addr, 1, set, ║clr, NULL, &level); ~ 00014824: f94003e4 ldr x4, [sp] ~ 00014828: 52800028 mov w8, #0x1 // #1 ~ 0001482c: 2a0803e2 mov w2, w8 ~ 00014830: aa1f03e5 mov x5, xzr ~ 00014834: 910053e6 add x6, sp, #0x14 kvm_pgtable_stage2_relax_perms:840.8 (pgtable.c) sbepe ret = ║stage2_update_leaf_attrs(pgt, addr, 1, set, clr, NULL, &level); ~ 00014838: 97ffff53 bl 14584 <stage2_update_leaf_attrs> kvm_pgtable_stage2_relax_perms:840.6 (pgtable.c) sbepe ret ║= stage2_update_leaf_attrs(pgt, addr, 1, set, clr, NULL, &level); ~ 0001483c: b9001be0 str w0, [sp, #24] <- 00014838(bl-succ)<return> kvm_pgtable_stage2_relax_perms:841.7 (pgtable.c) Sbepe if (!║ret) ~ 00014840: b9401be8 ldr w8, [sp, #24] kvm_pgtable_stage2_relax_perms:841.6 (pgtable.c) sbepe if (║!ret) ~ ┌───00014844: 35000108 cbnz w8, 14864 <kvm_pgtable_stage2_relax_perms+0xc4> ~ │ ┌─00014848: 14000001 b 1484c <kvm_pgtable_stage2_relax_perms+0xac> <- 00014844(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_stage2_relax_perms:842.3 (pgtable.c) Sbepe ║kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, pgt->mmu, addr, level); ~ │ └>0001484c: f85f83a8 ldur x8, [x29, #-8] <- 00014848(b)<kvm_pgtable_stage2_relax_perms+0xac> ~ 00014850: f9400d00 ldr x0, [x8, #24] ~ 00014854: f85f03a1 ldur x1, [x29, #-16] ~ 00014858: b94017e2 ldr w2, [sp, #20] ~ 0001485c: 97ffc196 bl 4eb4 <__kvm_tlb_flush_vmid_ipa> ~ │ ┌─00014860: 14000001 b 14864 <kvm_pgtable_stage2_relax_perms+0xc4> <- 0001485c(bl-succ)<return> │ │ │ │ kvm_pgtable_stage2_relax_perms:843.9 (pgtable.c) Sbepe return ║ret; ~ └>└>00014864: b9401be0 ldr w0, [sp, #24] <- 00014844(b.cc)<kvm_pgtable_stage2_relax_perms+0xc4>,00014860(b)<kvm_pgtable_stage2_relax_perms+0xc4> kvm_pgtable_stage2_relax_perms:843.2 (pgtable.c) sbepe ║return ret; ~ 00014868: a9437bfd ldp x29, x30, [sp, #48] ~ 0001486c: 910103ff add sp, sp, #0x40 000147ac CFA:r29+16 r29:c-16 r30:c-8 ~ 00014870: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x147a0 0x14874 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:824 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x147a0 0x14874 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:824 -prot param enum kvm_pgtable_prot<d70f1>/<d7403> 0x147a0 0x14874 (DW_OP_fbreg -0x14) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:825 -ret var int (base type, DW_ATE_signed size:4) 0x147a0 0x14874 (DW_OP_breg31 0x18) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:827 -level var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x147a0 0x14874 (DW_OP_breg31 0x14) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:828 -set var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x147a0 0x14874 (DW_OP_breg31 0x8) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:829 -clr var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x147a0 0x14874 (DW_OP_breg31 0x0) kvm_pgtable_stage2_relax_perms:arch/arm64/kvm/hyp/nvhe/../pgtable.c:829 **00014874 <kvm_pgtable_stage2_flush>: + kvm_pgtable_stage2_flush params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14874 0x149b0 (DW_OP_breg31 0x28) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x20) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x18) kvm_pgtable_stage2_flush:861.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14874 0x149b0 (DW_OP_breg31 0x28) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x20) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x18) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14874 0x149b0 (DW_OP_breg31 0x0) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:862 ~ 00014874: d10203ff sub sp, sp, #0x80 ~ 00014878: a9077bfd stp x29, x30, [sp, #112] 00014874 CFA:r31 r29:u r30:u ~ 0001487c: 9101c3fd add x29, sp, #0x70 ~ 00014880: f90017e0 str x0, [sp, #40] ~ 00014884: f90013e1 str x1, [sp, #32] ~ 00014888: f9000fe2 str x2, [sp, #24] kvm_pgtable_stage2_flush:862.37 (pgtable.c) SbePe struct kvm_pgtable_walker walker = { ~ 0001488c: 90000008 adrp x8, 14000 <stage2_map_walker+0xac> ~ 00014890: 9126c108 add x8, x8, #0x9b0 ~ 00014894: f90003e8 str x8, [sp] kvm_pgtable_stage2_flush:865.10 (pgtable.c) Sbepe .arg = ║pgt->mm_ops, ~ 00014898: f94017e8 ldr x8, [sp, #40] kvm_pgtable_stage2_flush:865.15 (pgtable.c) sbepe .arg = pgt->║mm_ops, ~ 0001489c: f9400908 ldr x8, [x8, #16] kvm_pgtable_stage2_flush:862.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 000148a0: f90007e8 str x8, [sp, #8] ~ 000148a4: 52800029 mov w9, #0x1 // #1 ~ 000148a8: b90013e9 str w9, [sp, #16] ~ 000148ac: 52800409 mov w9, #0x20 // #32 ~ 000148b0: b9003be9 str w9, [sp, #56] z: 0x148b4 0x1496c cpus_have_const_cap inlined from kvm_pgtable_stage2_flush:868 (pgtable.c) <d7ff0>: z 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) 0x148b4 0x1496c (DW_OP_breg31 0x38) cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~z 000148b4: b9403be9 ldr w9, [sp, #56] ~z 000148b8: b81d03a9 stur w9, [x29, #-48] a: 0x148bc 0x14964 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <d800d>:<d7ff0>: b: 0x148bc 0x148e4 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <d802a>:<d800d>:<d7ff0>: zab 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) 0x148bc 0x14964 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x148bc 0x148e4 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~zab 000148bc: f0000028 adrp x8, 1b000 <hyp_memory+0x460> ~zab 000148c0: b9479909 ldr w9, [x8, #1944] ~zab 000148c4: 71000129 subs w9, w9, #0x0 ~zab 000148c8: 1a9f07ea cset w10, ne // ne = any ~zab 000148cc: 381e43aa sturb w10, [x29, #-28] zab system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zab 000148d0: 385e43aa ldurb w10, [x29, #-28] ~zab 000148d4: 2a0a03e8 mov w8, w10 ~zab 000148d8: 92400108 and x8, x8, #0x1 zab system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zab 000148dc: f81d83a8 stur x8, [x29, #-40] zab system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zab 000148e0: f85d83a8 ldur x8, [x29, #-40] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x148bc 0x148e4 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c za cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~za ┌────000148e4: b4000388 cbz x8, 14954 <kvm_pgtable_stage2_flush+0xe0> ~za │ ┌─000148e8: 14000001 b 148ec <kvm_pgtable_stage2_flush+0x78> <- 000148e4(b.cc-succ)<fallthrough> │ │ za │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~za │ └>000148ec: b85d03a8 ldur w8, [x29, #-48] <- 000148e8(b)<kvm_pgtable_stage2_flush+0x78> ~za 000148f0: b81f83a8 stur w8, [x29, #-8] c: 0x148f4 0x14954 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8056>:<d800d>:<d7ff0>: zac __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0x148f4 0x14954 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~zac 000148f4: b85f83a8 ldur w8, [x29, #-8] zac __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~zac 000148f8: 7100f508 subs w8, w8, #0x3d ~zac │ ┌──000148fc: 540000ab b.lt 14910 <kvm_pgtable_stage2_flush+0x9c> // b.tstop │ │ ~zac │ │┌─00014900: 14000001 b 14904 <kvm_pgtable_stage2_flush+0x90> <- 000148fc(b.cc-succ)<fallthrough> │ ││ ~zac │ │└>00014904: 2a1f03e8 mov w8, wzr <- 00014900(b)<kvm_pgtable_stage2_flush+0x90> zac │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~zac │ │ 00014908: 381ff3a8 sturb w8, [x29, #-1] ~zac │┌┼──0001490c: 14000013 b 14958 <kvm_pgtable_stage2_flush+0xe4> │││ zac │││ __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)) 0x14910 0x14944 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~zac ││└─>00014910: b89f83a8 ldursw x8, [x29, #-8] <- 000148fc(b.cc)<kvm_pgtable_stage2_flush+0x9c> ~zac ││ 00014914: d37ced08 lsl x8, x8, #4 ~zac ││ 00014918: f0000029 adrp x9, 1b000 <hyp_memory+0x460> ~zac ││ 0001491c: 911e8129 add x9, x9, #0x7a0 ~zac ││ 00014920: b868692a ldr w10, [x9, x8] ~zac ││ 00014924: 7100014a subs w10, w10, #0x0 ~zac ││ 00014928: 1a9f07eb cset w11, ne // ne = any ~zac ││ 0001492c: 381f43ab sturb w11, [x29, #-12] zac ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zac ││ 00014930: 385f43ab ldurb w11, [x29, #-12] ~zac ││ 00014934: 2a0b03e8 mov w8, w11 ~zac ││ 00014938: 92400108 and x8, x8, #0x1 zac ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zac ││ 0001493c: f81e83a8 stur x8, [x29, #-24] zac ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zac ││ 00014940: f85e83a8 ldur x8, [x29, #-24] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14910 0x14944 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c zac ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zac ││ 00014944: f1000108 subs x8, x8, #0x0 ~zac ││ 00014948: 1a9f07eb cset w11, ne // ne = any zac ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~zac ││ 0001494c: 381ff3ab sturb w11, [x29, #-1] ~zac ││ ┌─00014950: 14000002 b 14958 <kvm_pgtable_stage2_flush+0xe4> -num param int (base type, DW_ATE_signed size:4) 0x148f4 0x14954 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ││ │ za ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~za └┼─┼>00014954: d4210000 brk #0x800 <- 000148e4(b.cc)<kvm_pgtable_stage2_flush+0xe0> │ │ d: 0x14958 0x1495c (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8056>:<d800d>:<d7ff0>: zad │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0x14958 0x1495c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~zad └>└>00014958: 385ff3a8 ldurb w8, [x29, #-1] <- 0001490c(b)<kvm_pgtable_stage2_flush+0xe4>,00014950(b)<kvm_pgtable_stage2_flush+0xe4> -num param int (base type, DW_ATE_signed size:4) 0x14958 0x1495c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c za cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~za 0001495c: 381d73a8 sturb w8, [x29, #-41] za cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~za 00014960: 385d73a8 ldurb w8, [x29, #-41] -num param int (base type, DW_ATE_signed size:4) 0x148bc 0x14964 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c z cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~z 00014964: 381cf3a8 sturb w8, [x29, #-49] z cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~z 00014968: 385cf3a8 ldurb w8, [x29, #-49] -num param int (base type, DW_ATE_signed size:4) 0x148b4 0x1496c (DW_OP_breg31 0x38) cpus_have_const_cap(inlined):kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c kvm_pgtable_stage2_flush:868.6 (pgtable.c) Sbepe if (║cpus_have_const_cap(ARM64_HAS_STAGE2_FWB)) ~ 0001496c: 71000508 subs w8, w8, #0x1 ~ ┌──00014970: 540000a1 b.ne 14984 <kvm_pgtable_stage2_flush+0x110> // b.any ~ │┌─00014974: 14000001 b 14978 <kvm_pgtable_stage2_flush+0x104> <- 00014970(b.cc-succ)<fallthrough> ││ ~ │└>00014978: 2a1f03e8 mov w8, wzr <- 00014974(b)<kvm_pgtable_stage2_flush+0x104> kvm_pgtable_stage2_flush:869.3 (pgtable.c) Sbepe ║return 0; ~ 0001497c: b90037e8 str w8, [sp, #52] ~ ┌┼──00014980: 14000008 b 149a0 <kvm_pgtable_stage2_flush+0x12c> ││ ││ kvm_pgtable_stage2_flush:871.26 (pgtable.c) Sbepe return kvm_pgtable_walk(║pgt, addr, size, &walker); ~ │└─>00014984: f94017e0 ldr x0, [sp, #40] <- 00014970(b.cc)<kvm_pgtable_stage2_flush+0x110> kvm_pgtable_stage2_flush:871.31 (pgtable.c) sbepe return kvm_pgtable_walk(pgt, ║addr, size, &walker); ~ 00014988: f94013e1 ldr x1, [sp, #32] kvm_pgtable_stage2_flush:871.37 (pgtable.c) sbepe return kvm_pgtable_walk(pgt, addr, ║size, &walker); ~ 0001498c: f9400fe2 ldr x2, [sp, #24] ~ 00014990: 910003e3 mov x3, sp kvm_pgtable_stage2_flush:871.9 (pgtable.c) sbepe return ║kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00014994: 97fffb79 bl 13778 <kvm_pgtable_walk> kvm_pgtable_stage2_flush:871.2 (pgtable.c) sbepe ║return kvm_pgtable_walk(pgt, addr, size, &walker); ~ 00014998: b90037e0 str w0, [sp, #52] <- 00014994(bl-succ)<return> ~ │ ┌─0001499c: 14000001 b 149a0 <kvm_pgtable_stage2_flush+0x12c> │ │ │ │ kvm_pgtable_stage2_flush:872.1 (pgtable.c) Sbepe ║} ~ └>└>000149a0: b94037e0 ldr w0, [sp, #52] <- 00014980(b)<kvm_pgtable_stage2_flush+0x12c>,0001499c(b)<kvm_pgtable_stage2_flush+0x12c> ~ 000149a4: a9477bfd ldp x29, x30, [sp, #112] ~ 000149a8: 910203ff add sp, sp, #0x80 00014880 CFA:r29+16 r29:c-16 r30:c-8 ~ 000149ac: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14874 0x149b0 (DW_OP_breg31 0x28) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x20) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14874 0x149b0 (DW_OP_breg31 0x18) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:860 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14874 0x149b0 (DW_OP_breg31 0x0) kvm_pgtable_stage2_flush:arch/arm64/kvm/hyp/nvhe/../pgtable.c:862 **000149b0 <stage2_flush_walker>: + stage2_flush_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x149b0 0x14a60 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x149b0 0x14a60 (DW_OP_fbreg -0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x149b0 0x14a60 (DW_OP_fbreg -0x2c) +arg param const(pointer(no type)) 0x149b0 0x14a60 (DW_OP_breg31 0x28) stage2_flush_walker:849.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x10) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x18) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x149b0 0x14a60 (DW_OP_fbreg -0x1c) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x149b0 0x14a60 (DW_OP_fbreg -0x28) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x149b0 0x14a60 (DW_OP_fbreg -0x2c) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:847 +arg param const(pointer(no type)) 0x149b0 0x14a60 (DW_OP_breg31 0x28) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:848 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x149b0 0x14a60 (DW_OP_breg31 0x20) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:850 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x149b0 0x14a60 (DW_OP_breg31 0x18) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:851 ~ 000149b0: d101c3ff sub sp, sp, #0x70 ~ 000149b4: a9067bfd stp x29, x30, [sp, #96] 000149b0 CFA:r31 r29:u r30:u ~ 000149b8: 910183fd add x29, sp, #0x60 ~ 000149bc: f81f03a0 stur x0, [x29, #-16] ~ 000149c0: f81e83a1 stur x1, [x29, #-24] ~ 000149c4: b81e43a2 stur w2, [x29, #-28] ~ 000149c8: f81d83a3 stur x3, [x29, #-40] ~ 000149cc: b81d43a4 stur w4, [x29, #-44] ~ 000149d0: f90017e5 str x5, [sp, #40] stage2_flush_walker:850.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║arg; ~ 000149d4: f94017e8 ldr x8, [sp, #40] stage2_flush_walker:850.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = arg; ~ 000149d8: f90013e8 str x8, [sp, #32] stage2_flush_walker:851.19 (pgtable.c) Sbepe kvm_pte_t pte = *║ptep; ~ 000149dc: f85d83a8 ldur x8, [x29, #-40] stage2_flush_walker:851.18 (pgtable.c) sbepe kvm_pte_t pte = ║*ptep; ~ 000149e0: f9400108 ldr x8, [x8] stage2_flush_walker:851.12 (pgtable.c) sbepe kvm_pte_t ║pte = *ptep; ~ 000149e4: f9000fe8 str x8, [sp, #24] stage2_flush_walker:853.21 (pgtable.c) Sbepe if (!kvm_pte_valid(║pte) || !stage2_pte_cacheable(pte)) ~ 000149e8: f9400fe0 ldr x0, [sp, #24] stage2_flush_walker:853.7 (pgtable.c) sbepe if (!║kvm_pte_valid(pte) || !stage2_pte_cacheable(pte)) ~ 000149ec: 94000234 bl 152bc <kvm_pte_valid> stage2_flush_walker:853.26 (pgtable.c) sbepe if (!kvm_pte_valid(pte) ║|| !stage2_pte_cacheable(pte)) ~ ┌────000149f0: 360000c0 tbz w0, #0, 14a08 <stage2_flush_walker+0x58> <- 000149ec(bl-succ)<return> ~ │ ┌─000149f4: 14000001 b 149f8 <stage2_flush_walker+0x48> <- 000149f0(b.cc-succ)<fallthrough> │ │ │ │ stage2_flush_walker:853.51 (pgtable.c) sbepe if (!kvm_pte_valid(pte) || !stage2_pte_cacheable(║pte)) ~ │ └>000149f8: f9400fe0 ldr x0, [sp, #24] <- 000149f4(b)<stage2_flush_walker+0x48> stage2_flush_walker:853.30 (pgtable.c) sbepe if (!kvm_pte_valid(pte) || !║stage2_pte_cacheable(pte)) ~ 000149fc: 9400046d bl 15bb0 <stage2_pte_cacheable> stage2_flush_walker:853.6 (pgtable.c) sbepe if (║!kvm_pte_valid(pte) || !stage2_pte_cacheable(pte)) ~ │ ┌──00014a00: 370000a0 tbnz w0, #0, 14a14 <stage2_flush_walker+0x64> <- 000149fc(bl-succ)<return> │ │ ~ │ │┌─00014a04: 14000001 b 14a08 <stage2_flush_walker+0x58> <- 00014a00(b.cc-succ)<fallthrough> │ ││ ~ └>│└>00014a08: 2a1f03e8 mov w8, wzr <- 000149f0(b.cc)<stage2_flush_walker+0x58>,00014a04(b)<stage2_flush_walker+0x58> stage2_flush_walker:854.3 (pgtable.c) Sbepe ║return 0; ~ 00014a0c: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼──00014a10: 14000010 b 14a50 <stage2_flush_walker+0xa0> ││ ││ stage2_flush_walker:856.37 (pgtable.c) Sbepe stage2_flush_dcache(kvm_pte_follow(║pte, mm_ops), kvm_granule_size(level)); ~ │└─>00014a14: f9400fe0 ldr x0, [sp, #24] <- 00014a00(b.cc)<stage2_flush_walker+0x64> stage2_flush_walker:856.42 (pgtable.c) sbepe stage2_flush_dcache(kvm_pte_follow(pte, ║mm_ops), kvm_granule_size(level)); ~ 00014a18: f94013e1 ldr x1, [sp, #32] stage2_flush_walker:856.22 (pgtable.c) sbepe stage2_flush_dcache(║kvm_pte_follow(pte, mm_ops), kvm_granule_size(level)); ~ 00014a1c: 94000219 bl 15280 <kvm_pte_follow> stage2_flush_walker:856.68 (pgtable.c) sbepe stage2_flush_dcache(kvm_pte_follow(pte, mm_ops), kvm_granule_size(║level)); ~ 00014a20: b85e43a8 ldur w8, [x29, #-28] <- 00014a1c(bl-succ)<return> ~ 00014a24: f9000be0 str x0, [sp, #16] stage2_flush_walker:856.51 (pgtable.c) sbepe stage2_flush_dcache(kvm_pte_follow(pte, mm_ops), ║kvm_granule_size(level)); ~ 00014a28: 2a0803e0 mov w0, w8 ~ 00014a2c: 94000209 bl 15250 <kvm_granule_size> ~ 00014a30: f9400be1 ldr x1, [sp, #16] <- 00014a2c(bl-succ)<return> ~ 00014a34: f90007e0 str x0, [sp, #8] stage2_flush_walker:856.2 (pgtable.c) sbepe ║stage2_flush_dcache(kvm_pte_follow(pte, mm_ops), kvm_granule_size(level)); ~ 00014a38: aa0103e0 mov x0, x1 ~ 00014a3c: f94007e1 ldr x1, [sp, #8] ~ 00014a40: 940004a6 bl 15cd8 <stage2_flush_dcache> ~ 00014a44: 2a1f03e8 mov w8, wzr <- 00014a40(bl-succ)<return> stage2_flush_walker:857.2 (pgtable.c) Sbepe ║return 0; ~ 00014a48: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00014a4c: 14000001 b 14a50 <stage2_flush_walker+0xa0> │ │ │ │ stage2_flush_walker:858.1 (pgtable.c) Sbepe ║} ~ └>└>00014a50: b85fc3a0 ldur w0, [x29, #-4] <- 00014a10(b)<stage2_flush_walker+0xa0>,00014a4c(b)<stage2_flush_walker+0xa0> ~ 00014a54: a9467bfd ldp x29, x30, [sp, #96] ~ 00014a58: 9101c3ff add sp, sp, #0x70 000149bc CFA:r29+16 r29:c-16 r30:c-8 ~ 00014a5c: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x10) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x149b0 0x14a60 (DW_OP_fbreg -0x18) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x149b0 0x14a60 (DW_OP_fbreg -0x1c) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x149b0 0x14a60 (DW_OP_fbreg -0x28) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:846 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x149b0 0x14a60 (DW_OP_fbreg -0x2c) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:847 -arg param const(pointer(no type)) 0x149b0 0x14a60 (DW_OP_breg31 0x28) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:848 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x149b0 0x14a60 (DW_OP_breg31 0x20) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:850 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x149b0 0x14a60 (DW_OP_breg31 0x18) stage2_flush_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:851 **00014a60 <kvm_pgtable_stage2_init>: + kvm_pgtable_stage2_init params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14a60 0x14b8c (DW_OP_fbreg -0x10) +arch param pointer(struct kvm_arch<d70f1>/<d906a>) 0x14a60 0x14b8c (DW_OP_fbreg -0x18) +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x14a60 0x14b8c (DW_OP_breg31 0x20) kvm_pgtable_stage2_init:876.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14a60 0x14b8c (DW_OP_fbreg -0x10) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:874 +arch param pointer(struct kvm_arch<d70f1>/<d906a>) 0x14a60 0x14b8c (DW_OP_fbreg -0x18) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:874 +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x14a60 0x14b8c (DW_OP_breg31 0x20) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:875 +pgd_sz var typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14a60 0x14b8c (DW_OP_breg31 0x18) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:877 +vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14a60 0x14b8c (DW_OP_breg31 0x10) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:878 +ia_bits var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0xc) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:879 +sl0 var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0x8) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:880 +start_level var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0x0) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:881 ~ 00014a60: d10143ff sub sp, sp, #0x50 <- 0000af9c(bl)<kvm_pgtable_stage2_init> ~ 00014a64: a9047bfd stp x29, x30, [sp, #64] 00014a60 CFA:r31 r29:u r30:u ~ 00014a68: 910103fd add x29, sp, #0x40 ~ 00014a6c: f81f03a0 stur x0, [x29, #-16] ~ 00014a70: f81e83a1 stur x1, [x29, #-24] ~ 00014a74: f90013e2 str x2, [sp, #32] kvm_pgtable_stage2_init:878.13 (pgtable.c) SbePe u64 vtcr = ║arch->vtcr; ~ 00014a78: f85e83a8 ldur x8, [x29, #-24] kvm_pgtable_stage2_init:878.19 (pgtable.c) sbepe u64 vtcr = arch->║vtcr; ~ 00014a7c: f9401908 ldr x8, [x8, #48] kvm_pgtable_stage2_init:878.6 (pgtable.c) sbepe u64 ║vtcr = arch->vtcr; ~ 00014a80: f9000be8 str x8, [sp, #16] kvm_pgtable_stage2_init:879.16 (pgtable.c) Sbepe u32 ia_bits = ║VTCR_EL2_IPA(vtcr); ~ 00014a84: b94013e9 ldr w9, [sp, #16] ~ 00014a88: 12001529 and w9, w9, #0x3f ~ 00014a8c: 5280080a mov w10, #0x40 // #64 ~ 00014a90: 6b090149 subs w9, w10, w9 ~ 00014a94: 2a0903e0 mov w0, w9 kvm_pgtable_stage2_init:879.6 (pgtable.c) sbepe u32 ║ia_bits = VTCR_EL2_IPA(vtcr); ~ 00014a98: b9000fe0 str w0, [sp, #12] kvm_pgtable_stage2_init:880.12 (pgtable.c) Sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─00014a9c: 14000001 b 14aa0 <kvm_pgtable_stage2_init+0x40> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└>00014aa0: 14000001 b 14aa4 <kvm_pgtable_stage2_init+0x44> <- 00014a9c(b)<kvm_pgtable_stage2_init+0x40> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└──>00014aa4: 14000001 b 14aa8 <kvm_pgtable_stage2_init+0x48> <- 00014aa0(b)<kvm_pgtable_stage2_init+0x44> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└────>00014aa8: 14000001 b 14aac <kvm_pgtable_stage2_init+0x4c> <- 00014aa4(b)<kvm_pgtable_stage2_init+0x48> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└──────>00014aac: 14000001 b 14ab0 <kvm_pgtable_stage2_init+0x50> <- 00014aa8(b)<kvm_pgtable_stage2_init+0x4c> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└────────>00014ab0: 14000001 b 14ab4 <kvm_pgtable_stage2_init+0x54> <- 00014aac(b)<kvm_pgtable_stage2_init+0x50> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└──────────>00014ab4: 14000001 b 14ab8 <kvm_pgtable_stage2_init+0x58> <- 00014ab0(b)<kvm_pgtable_stage2_init+0x54> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└────────────>00014ab8: 14000001 b 14abc <kvm_pgtable_stage2_init+0x5c> <- 00014ab4(b)<kvm_pgtable_stage2_init+0x58> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└──────────────>00014abc: 14000001 b 14ac0 <kvm_pgtable_stage2_init+0x60> <- 00014ab8(b)<kvm_pgtable_stage2_init+0x5c> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ ┌─└────────────────>00014ac0: 14000001 b 14ac4 <kvm_pgtable_stage2_init+0x64> <- 00014abc(b)<kvm_pgtable_stage2_init+0x60> kvm_pgtable_stage2_init:880.12 (pgtable.c) sbepe u32 sl0 = ║FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ └──────────────────>00014ac4: f9400be8 ldr x8, [sp, #16] <- 00014ac0(b)<kvm_pgtable_stage2_init+0x64> ~ 00014ac8: d3461d08 ubfx x8, x8, #6, #2 ~ 00014acc: b90007e8 str w8, [sp, #4] ~ 00014ad0: b94007e8 ldr w8, [sp, #4] kvm_pgtable_stage2_init:880.6 (pgtable.c) sbepe u32 ║sl0 = FIELD_GET(VTCR_EL2_SL0_MASK, vtcr); ~ 00014ad4: b9000be8 str w8, [sp, #8] kvm_pgtable_stage2_init:881.46 (pgtable.c) Sbepe u32 start_level = VTCR_EL2_TGRAN_SL0_BASE - ║sl0; ~ 00014ad8: b9400be8 ldr w8, [sp, #8] ~ 00014adc: 52800049 mov w9, #0x2 // #2 kvm_pgtable_stage2_init:881.44 (pgtable.c) sbepe u32 start_level = VTCR_EL2_TGRAN_SL0_BASE ║- sl0; ~ 00014ae0: 6b080128 subs w8, w9, w8 ~ 00014ae4: 2a0803e0 mov w0, w8 kvm_pgtable_stage2_init:881.6 (pgtable.c) sbepe u32 ║start_level = VTCR_EL2_TGRAN_SL0_BASE - sl0; ~ 00014ae8: b90003e0 str w0, [sp] kvm_pgtable_stage2_init:883.25 (pgtable.c) Sbepe pgd_sz = kvm_pgd_pages(║ia_bits, start_level) * PAGE_SIZE; ~ 00014aec: b9400fe0 ldr w0, [sp, #12] kvm_pgtable_stage2_init:883.34 (pgtable.c) sbepe pgd_sz = kvm_pgd_pages(ia_bits, ║start_level) * PAGE_SIZE; ~ 00014af0: b94003e1 ldr w1, [sp] kvm_pgtable_stage2_init:883.11 (pgtable.c) sbepe pgd_sz = ║kvm_pgd_pages(ia_bits, start_level) * PAGE_SIZE; ~ 00014af4: 94000026 bl 14b8c <kvm_pgd_pages> ~ 00014af8: 2a0003e8 mov w8, w0 <- 00014af4(bl-succ)<return> ~ 00014afc: 2a0803ea mov w10, w8 kvm_pgtable_stage2_init:883.47 (pgtable.c) sbepe pgd_sz = kvm_pgd_pages(ia_bits, start_level) ║* PAGE_SIZE; ~ 00014b00: d374cd4a lsl x10, x10, #12 kvm_pgtable_stage2_init:883.9 (pgtable.c) sbepe pgd_sz ║= kvm_pgd_pages(ia_bits, start_level) * PAGE_SIZE; ~ 00014b04: f9000fea str x10, [sp, #24] kvm_pgtable_stage2_init:884.13 (pgtable.c) Sbepe pgt->pgd = ║mm_ops->zalloc_pages_exact(pgd_sz); ~ 00014b08: f94013ea ldr x10, [sp, #32] kvm_pgtable_stage2_init:884.21 (pgtable.c) sbepe pgt->pgd = mm_ops->║zalloc_pages_exact(pgd_sz); ~ 00014b0c: f940054a ldr x10, [x10, #8] kvm_pgtable_stage2_init:884.40 (pgtable.c) sbepe pgt->pgd = mm_ops->zalloc_pages_exact(║pgd_sz); ~ 00014b10: f9400fe0 ldr x0, [sp, #24] kvm_pgtable_stage2_init:884.13 (pgtable.c) sbepe pgt->pgd = ║mm_ops->zalloc_pages_exact(pgd_sz); ~ 00014b14: d63f0140 blr x10 kvm_pgtable_stage2_init:884.2 (pgtable.c) sbepe ║pgt->pgd = mm_ops->zalloc_pages_exact(pgd_sz); ~ 00014b18: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_stage2_init:884.11 (pgtable.c) sbepe pgt->pgd ║= mm_ops->zalloc_pages_exact(pgd_sz); ~ 00014b1c: f9000540 str x0, [x10, #8] kvm_pgtable_stage2_init:885.7 (pgtable.c) Sbepe if (!║pgt->pgd) ~ 00014b20: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_stage2_init:885.12 (pgtable.c) sbepe if (!pgt->║pgd) ~ 00014b24: f940054a ldr x10, [x10, #8] kvm_pgtable_stage2_init:885.6 (pgtable.c) sbepe if (║!pgt->pgd) ~ ┌──00014b28: b50000aa cbnz x10, 14b3c <kvm_pgtable_stage2_init+0xdc> ~ │┌─00014b2c: 14000001 b 14b30 <kvm_pgtable_stage2_init+0xd0> <- 00014b28(b.cc-succ)<fallthrough> ││ ~ │└>00014b30: 12800168 mov w8, #0xfffffff4 // #-12 <- 00014b2c(b)<kvm_pgtable_stage2_init+0xd0> kvm_pgtable_stage2_init:886.3 (pgtable.c) Sbepe ║return -ENOMEM; ~ 00014b34: b81fc3a8 stur w8, [x29, #-4] ~ ┌┼──00014b38: 14000011 b 14b7c <kvm_pgtable_stage2_init+0x11c> ││ ││ kvm_pgtable_stage2_init:888.18 (pgtable.c) Sbepe pgt->ia_bits = ║ia_bits; ~ │└─>00014b3c: b9400fe8 ldr w8, [sp, #12] <- 00014b28(b.cc)<kvm_pgtable_stage2_init+0xdc> kvm_pgtable_stage2_init:888.2 (pgtable.c) sbepe ║pgt->ia_bits = ia_bits; ~ 00014b40: f85f03a9 ldur x9, [x29, #-16] kvm_pgtable_stage2_init:888.16 (pgtable.c) sbepe pgt->ia_bits ║= ia_bits; ~ 00014b44: b9000128 str w8, [x9] kvm_pgtable_stage2_init:889.21 (pgtable.c) Sbepe pgt->start_level = ║start_level; ~ 00014b48: b94003e8 ldr w8, [sp] kvm_pgtable_stage2_init:889.2 (pgtable.c) sbepe ║pgt->start_level = start_level; ~ 00014b4c: f85f03a9 ldur x9, [x29, #-16] kvm_pgtable_stage2_init:889.19 (pgtable.c) sbepe pgt->start_level ║= start_level; ~ 00014b50: b9000528 str w8, [x9, #4] kvm_pgtable_stage2_init:890.17 (pgtable.c) Sbepe pgt->mm_ops = ║mm_ops; ~ 00014b54: f94013e9 ldr x9, [sp, #32] kvm_pgtable_stage2_init:890.2 (pgtable.c) sbepe ║pgt->mm_ops = mm_ops; ~ 00014b58: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_stage2_init:890.15 (pgtable.c) sbepe pgt->mm_ops ║= mm_ops; ~ 00014b5c: f9000949 str x9, [x10, #16] kvm_pgtable_stage2_init:891.15 (pgtable.c) Sbepe pgt->mmu = &║arch->mmu; ~ 00014b60: f85e83a9 ldur x9, [x29, #-24] kvm_pgtable_stage2_init:891.2 (pgtable.c) sbepe ║pgt->mmu = &arch->mmu; ~ 00014b64: f85f03aa ldur x10, [x29, #-16] kvm_pgtable_stage2_init:891.12 (pgtable.c) sbepe pgt->mmu ║= &arch->mmu; ~ 00014b68: f9000d49 str x9, [x10, #24] kvm_pgtable_stage2_init:894.2 (pgtable.c) Sbepe ║dsb(ishst); ~ 00014b6c: d5033a9f dsb ishst ~ 00014b70: 2a1f03e8 mov w8, wzr kvm_pgtable_stage2_init:895.2 (pgtable.c) Sbepe ║return 0; ~ 00014b74: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00014b78: 14000001 b 14b7c <kvm_pgtable_stage2_init+0x11c> │ │ │ │ kvm_pgtable_stage2_init:896.1 (pgtable.c) Sbepe ║} ~ └>└>00014b7c: b85fc3a0 ldur w0, [x29, #-4] <- 00014b38(b)<kvm_pgtable_stage2_init+0x11c>,00014b78(b)<kvm_pgtable_stage2_init+0x11c> ~ 00014b80: a9447bfd ldp x29, x30, [sp, #64] ~ 00014b84: 910143ff add sp, sp, #0x50 00014a6c CFA:r29+16 r29:c-16 r30:c-8 ~ 00014b88: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14a60 0x14b8c (DW_OP_fbreg -0x10) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:874 -arch param pointer(struct kvm_arch<d70f1>/<d906a>) 0x14a60 0x14b8c (DW_OP_fbreg -0x18) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:874 -mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x14a60 0x14b8c (DW_OP_breg31 0x20) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:875 -pgd_sz var typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14a60 0x14b8c (DW_OP_breg31 0x18) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:877 -vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14a60 0x14b8c (DW_OP_breg31 0x10) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:878 -ia_bits var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0xc) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:879 -sl0 var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0x8) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:880 -start_level var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14a60 0x14b8c (DW_OP_breg31 0x0) kvm_pgtable_stage2_init:arch/arm64/kvm/hyp/nvhe/../pgtable.c:881 **00014b8c <kvm_pgd_pages>: + kvm_pgd_pages params: +ia_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x4) +start_level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x8) kvm_pgd_pages:106.0 (pgtable.c) Sbepe ║{ +ia_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x4) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:105 +start_level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x8) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:105 +pgt var struct kvm_pgtable<d70f1>/<d8ea9> 0x14b8c 0x14be0 (DW_OP_breg31 0x8) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:107 ~ 00014b8c: d10103ff sub sp, sp, #0x40 <- 00014af4(bl)<kvm_pgd_pages>,00014c84(bl)<kvm_pgd_pages> ~ 00014b90: a9037bfd stp x29, x30, [sp, #48] 00014b8c CFA:r31 r29:u r30:u ~ 00014b94: 9100c3fd add x29, sp, #0x30 ~ 00014b98: b81fc3a0 stur w0, [x29, #-4] ~ 00014b9c: b81f83a1 stur w1, [x29, #-8] ~ 00014ba0: aa1f03e8 mov x8, xzr kvm_pgd_pages:107.21 (pgtable.c) SbePe struct kvm_pgtable ║pgt = { ~ 00014ba4: f90013e8 str x8, [sp, #32] ~ 00014ba8: f9000fe8 str x8, [sp, #24] ~ 00014bac: f9000be8 str x8, [sp, #16] ~ 00014bb0: f90007e8 str x8, [sp, #8] kvm_pgd_pages:108.14 (pgtable.c) Sbepe .ia_bits = ║ia_bits, ~ 00014bb4: b85fc3a9 ldur w9, [x29, #-4] kvm_pgd_pages:107.27 (pgtable.c) Sbepe struct kvm_pgtable pgt = { ~ 00014bb8: b9000be9 str w9, [sp, #8] kvm_pgd_pages:109.18 (pgtable.c) Sbepe .start_level = ║start_level, ~ 00014bbc: b85f83a9 ldur w9, [x29, #-8] kvm_pgd_pages:107.27 (pgtable.c) Sbepe struct kvm_pgtable pgt = { ~ 00014bc0: b9000fe9 str w9, [sp, #12] ~ 00014bc4: 910023e0 add x0, sp, #0x8 ~ 00014bc8: 92800001 mov x1, #0xffffffffffffffff // #-1 kvm_pgd_pages:112.9 (pgtable.c) Sbepe return ║__kvm_pgd_page_idx(&pgt, -1ULL) + 1; ~ 00014bcc: 940000be bl 14ec4 <__kvm_pgd_page_idx> kvm_pgd_pages:112.41 (pgtable.c) sbepe return __kvm_pgd_page_idx(&pgt, -1ULL) ║+ 1; ~ 00014bd0: 11000400 add w0, w0, #0x1 <- 00014bcc(bl-succ)<return> kvm_pgd_pages:112.2 (pgtable.c) sbepe ║return __kvm_pgd_page_idx(&pgt, -1ULL) + 1; ~ 00014bd4: a9437bfd ldp x29, x30, [sp, #48] ~ 00014bd8: 910103ff add sp, sp, #0x40 00014b98 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014bdc: d65f03c0 ret -ia_bits param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x4) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:105 -start_level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14b8c 0x14be0 (DW_OP_fbreg -0x8) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:105 -pgt var struct kvm_pgtable<d70f1>/<d8ea9> 0x14b8c 0x14be0 (DW_OP_breg31 0x8) kvm_pgd_pages:arch/arm64/kvm/hyp/nvhe/../pgtable.c:107 **00014be0 <kvm_pgtable_stage2_destroy>: + kvm_pgtable_stage2_destroy params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14be0 0x14cc8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_destroy:917.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14be0 0x14cc8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:916 +pgd_sz var typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14be0 0x14cc8 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:918 +walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14be0 0x14cc8 (DW_OP_breg31 0x28) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:919 ~ 00014be0: d10183ff sub sp, sp, #0x60 ~ 00014be4: a9057bfd stp x29, x30, [sp, #80] 00014be0 CFA:r31 r29:u r30:u ~ 00014be8: 910143fd add x29, sp, #0x50 ~ 00014bec: f81f83a0 stur x0, [x29, #-8] kvm_pgtable_stage2_destroy:919.37 (pgtable.c) SbePe struct kvm_pgtable_walker walker = { ~ 00014bf0: 90000008 adrp x8, 14000 <stage2_map_walker+0xac> ~ 00014bf4: 91332108 add x8, x8, #0xcc8 ~ 00014bf8: f90017e8 str x8, [sp, #40] kvm_pgtable_stage2_destroy:923.10 (pgtable.c) Sbepe .arg = ║pgt->mm_ops, ~ 00014bfc: f85f83a8 ldur x8, [x29, #-8] kvm_pgtable_stage2_destroy:923.15 (pgtable.c) sbepe .arg = pgt->║mm_ops, ~ 00014c00: f9400908 ldr x8, [x8, #16] kvm_pgtable_stage2_destroy:919.37 (pgtable.c) Sbepe struct kvm_pgtable_walker walker = { ~ 00014c04: f9001be8 str x8, [sp, #48] ~ 00014c08: 528000a9 mov w9, #0x5 // #5 ~ 00014c0c: b9003be9 str w9, [sp, #56] kvm_pgtable_stage2_destroy:926.2 (pgtable.c) Sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x14c10 0x14c74 (DW_OP_breg31 0x24) lexblock:kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:926 ~ 00014c10: f85f83a8 ldur x8, [x29, #-8] ~ 00014c14: b9400109 ldr w9, [x8] ~ 00014c18: 2a0903ea mov w10, w9 ~ 00014c1c: 52800029 mov w9, #0x1 // #1 ~ 00014c20: 2a0903eb mov w11, w9 ~ 00014c24: 9aca2162 lsl x2, x11, x10 ~ 00014c28: aa1f03e0 mov x0, xzr ~ 00014c2c: 9100a3e3 add x3, sp, #0x28 ~ 00014c30: f9000be0 str x0, [sp, #16] ~ 00014c34: aa0803e0 mov x0, x8 ~ 00014c38: f9400be1 ldr x1, [sp, #16] ~ 00014c3c: 97fffacf bl 13778 <kvm_pgtable_walk> ~ 00014c40: 71000009 subs w9, w0, #0x0 <- 00014c3c(bl-succ)<return> ~ 00014c44: 1a9f07ec cset w12, ne // ne = any ~ 00014c48: b90027ec str w12, [sp, #36] kvm_pgtable_stage2_destroy:926.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ 00014c4c: b94027ec ldr w12, [sp, #36] kvm_pgtable_stage2_destroy:926.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ ┌───00014c50: 3400008c cbz w12, 14c60 <kvm_pgtable_stage2_destroy+0x80> ~ │ ┌─00014c54: 14000001 b 14c58 <kvm_pgtable_stage2_destroy+0x78> <- 00014c50(b.cc-succ)<fallthrough> │ │ │ │ kvm_pgtable_stage2_destroy:926.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ │ └>00014c58: d4210000 brk #0x800 <- 00014c54(b)<kvm_pgtable_stage2_destroy+0x78> ~ │ ┌─00014c5c: 14000001 b 14c60 <kvm_pgtable_stage2_destroy+0x80> │ │ │ │ kvm_pgtable_stage2_destroy:926.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ └>└>00014c60: b94027e8 ldr w8, [sp, #36] <- 00014c50(b.cc)<kvm_pgtable_stage2_destroy+0x80>,00014c5c(b)<kvm_pgtable_stage2_destroy+0x80> ~ 00014c64: 71000108 subs w8, w8, #0x0 ~ 00014c68: 1a9f07e9 cset w9, ne // ne = any ~ 00014c6c: 2a0903ea mov w10, w9 kvm_pgtable_stage2_destroy:926.2 (pgtable.c) sbepe ║WARN_ON(kvm_pgtable_walk(pgt, 0, BIT(pgt->ia_bits), &walker)); ~ 00014c70: f9000fea str x10, [sp, #24] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x14c10 0x14c74 (DW_OP_breg31 0x24) lexblock:kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:926 kvm_pgtable_stage2_destroy:927.25 (pgtable.c) Sbepe pgd_sz = kvm_pgd_pages(║pgt->ia_bits, pgt->start_level) * PAGE_SIZE; ~ 00014c74: f85f83aa ldur x10, [x29, #-8] kvm_pgtable_stage2_destroy:927.30 (pgtable.c) sbepe pgd_sz = kvm_pgd_pages(pgt->║ia_bits, pgt->start_level) * PAGE_SIZE; ~ 00014c78: b9400140 ldr w0, [x10] kvm_pgtable_stage2_destroy:927.44 (pgtable.c) sbepe pgd_sz = kvm_pgd_pages(pgt->ia_bits, pgt->║start_level) * PAGE_SIZE; ~ 00014c7c: b9400541 ldr w1, [x10, #4] ~ 00014c80: b9000fe8 str w8, [sp, #12] kvm_pgtable_stage2_destroy:927.11 (pgtable.c) sbepe pgd_sz = ║kvm_pgd_pages(pgt->ia_bits, pgt->start_level) * PAGE_SIZE; ~ 00014c84: 97ffffc2 bl 14b8c <kvm_pgd_pages> ~ 00014c88: 2a0003e8 mov w8, w0 <- 00014c84(bl-succ)<return> ~ 00014c8c: 2a0803ea mov w10, w8 kvm_pgtable_stage2_destroy:927.57 (pgtable.c) sbepe pgd_sz = kvm_pgd_pages(pgt->ia_bits, pgt->start_level) ║* PAGE_SIZE; ~ 00014c90: d374cd4a lsl x10, x10, #12 kvm_pgtable_stage2_destroy:927.9 (pgtable.c) sbepe pgd_sz ║= kvm_pgd_pages(pgt->ia_bits, pgt->start_level) * PAGE_SIZE; ~ 00014c94: f81f03aa stur x10, [x29, #-16] kvm_pgtable_stage2_destroy:928.2 (pgtable.c) Sbepe ║pgt->mm_ops->free_pages_exact(pgt->pgd, pgd_sz); ~ 00014c98: f85f83aa ldur x10, [x29, #-8] kvm_pgtable_stage2_destroy:928.7 (pgtable.c) sbepe pgt->║mm_ops->free_pages_exact(pgt->pgd, pgd_sz); ~ 00014c9c: f940094b ldr x11, [x10, #16] kvm_pgtable_stage2_destroy:928.15 (pgtable.c) sbepe pgt->mm_ops->║free_pages_exact(pgt->pgd, pgd_sz); ~ 00014ca0: f940096b ldr x11, [x11, #16] kvm_pgtable_stage2_destroy:928.37 (pgtable.c) sbepe pgt->mm_ops->free_pages_exact(pgt->║pgd, pgd_sz); ~ 00014ca4: f9400540 ldr x0, [x10, #8] kvm_pgtable_stage2_destroy:928.42 (pgtable.c) sbepe pgt->mm_ops->free_pages_exact(pgt->pgd, ║pgd_sz); ~ 00014ca8: f85f03a1 ldur x1, [x29, #-16] kvm_pgtable_stage2_destroy:928.2 (pgtable.c) sbepe ║pgt->mm_ops->free_pages_exact(pgt->pgd, pgd_sz); ~ 00014cac: d63f0160 blr x11 kvm_pgtable_stage2_destroy:929.2 (pgtable.c) Sbepe ║pgt->pgd = NULL; ~ 00014cb0: f85f83aa ldur x10, [x29, #-8] ~ 00014cb4: aa1f03eb mov x11, xzr kvm_pgtable_stage2_destroy:929.11 (pgtable.c) sbepe pgt->pgd ║= NULL; ~ 00014cb8: f900054b str x11, [x10, #8] kvm_pgtable_stage2_destroy:930.1 (pgtable.c) Sbepe ║} ~ 00014cbc: a9457bfd ldp x29, x30, [sp, #80] ~ 00014cc0: 910183ff add sp, sp, #0x60 00014bec CFA:r29+16 r29:c-16 r30:c-8 ~ 00014cc4: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14be0 0x14cc8 (DW_OP_fbreg -0x8) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:916 -pgd_sz var typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14be0 0x14cc8 (DW_OP_fbreg -0x10) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:918 -walker var struct kvm_pgtable_walker<d70f1>/<e7095> 0x14be0 0x14cc8 (DW_OP_breg31 0x28) kvm_pgtable_stage2_destroy:arch/arm64/kvm/hyp/nvhe/../pgtable.c:919 **00014cc8 <stage2_free_walker>: + stage2_free_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14cc8 0x14d80 (DW_OP_breg31 0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x14cc8 0x14d80 (DW_OP_breg31 0x24) +arg param const(pointer(no type)) 0x14cc8 0x14d80 (DW_OP_breg31 0x18) stage2_free_walker:901.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x10) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x18) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x1c) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14cc8 0x14d80 (DW_OP_breg31 0x28) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x14cc8 0x14d80 (DW_OP_breg31 0x24) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:899 +arg param const(pointer(no type)) 0x14cc8 0x14d80 (DW_OP_breg31 0x18) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:900 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x14cc8 0x14d80 (DW_OP_breg31 0x10) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:902 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14cc8 0x14d80 (DW_OP_breg31 0x8) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:903 ~ 00014cc8: d10183ff sub sp, sp, #0x60 ~ 00014ccc: a9057bfd stp x29, x30, [sp, #80] 00014cc8 CFA:r31 r29:u r30:u ~ 00014cd0: 910143fd add x29, sp, #0x50 ~ 00014cd4: f81f03a0 stur x0, [x29, #-16] ~ 00014cd8: f81e83a1 stur x1, [x29, #-24] ~ 00014cdc: b81e43a2 stur w2, [x29, #-28] ~ 00014ce0: f90017e3 str x3, [sp, #40] ~ 00014ce4: b90027e4 str w4, [sp, #36] ~ 00014ce8: f9000fe5 str x5, [sp, #24] stage2_free_walker:902.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║arg; ~ 00014cec: f9400fe8 ldr x8, [sp, #24] stage2_free_walker:902.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = arg; ~ 00014cf0: f9000be8 str x8, [sp, #16] stage2_free_walker:903.19 (pgtable.c) Sbepe kvm_pte_t pte = *║ptep; ~ 00014cf4: f94017e8 ldr x8, [sp, #40] stage2_free_walker:903.18 (pgtable.c) sbepe kvm_pte_t pte = ║*ptep; ~ 00014cf8: f9400108 ldr x8, [x8] stage2_free_walker:903.12 (pgtable.c) sbepe kvm_pte_t ║pte = *ptep; ~ 00014cfc: f90007e8 str x8, [sp, #8] stage2_free_walker:905.21 (pgtable.c) Sbepe if (!kvm_pte_valid(║pte)) ~ 00014d00: f94007e0 ldr x0, [sp, #8] stage2_free_walker:905.7 (pgtable.c) sbepe if (!║kvm_pte_valid(pte)) ~ 00014d04: 9400016e bl 152bc <kvm_pte_valid> stage2_free_walker:905.6 (pgtable.c) sbepe if (║!kvm_pte_valid(pte)) ~ ┌──00014d08: 370000a0 tbnz w0, #0, 14d1c <stage2_free_walker+0x54> <- 00014d04(bl-succ)<return> ~ │┌─00014d0c: 14000001 b 14d10 <stage2_free_walker+0x48> <- 00014d08(b.cc-succ)<fallthrough> ││ ~ │└>00014d10: 2a1f03e8 mov w8, wzr <- 00014d0c(b)<stage2_free_walker+0x48> stage2_free_walker:906.3 (pgtable.c) Sbepe ║return 0; ~ 00014d14: b81fc3a8 stur w8, [x29, #-4] ~ ┌─┼──00014d18: 14000016 b 14d70 <stage2_free_walker+0xa8> │ │ │ │ stage2_free_walker:908.2 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ │ └─>00014d1c: f9400be8 ldr x8, [sp, #16] <- 00014d08(b.cc)<stage2_free_walker+0x54> stage2_free_walker:908.10 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ 00014d20: f9401108 ldr x8, [x8, #32] stage2_free_walker:908.19 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ 00014d24: f94017e0 ldr x0, [sp, #40] stage2_free_walker:908.2 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ 00014d28: d63f0100 blr x8 stage2_free_walker:910.20 (pgtable.c) Sbepe if (kvm_pte_table(║pte, level)) ~ 00014d2c: f94007e0 ldr x0, [sp, #8] stage2_free_walker:910.25 (pgtable.c) sbepe if (kvm_pte_table(pte, ║level)) ~ 00014d30: b85e43a1 ldur w1, [x29, #-28] stage2_free_walker:910.6 (pgtable.c) sbepe if (║kvm_pte_table(pte, level)) ~ 00014d34: 94000106 bl 1514c <kvm_pte_table> stage2_free_walker:910.6 (pgtable.c) sbepe if (║kvm_pte_table(pte, level)) ~ │┌───00014d38: 36000160 tbz w0, #0, 14d64 <stage2_free_walker+0x9c> <- 00014d34(bl-succ)<return> ││ ~ ││ ┌─00014d3c: 14000001 b 14d40 <stage2_free_walker+0x78> <- 00014d38(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_free_walker:911.3 (pgtable.c) Sbepe ║mm_ops->put_page(kvm_pte_follow(pte, mm_ops)); ~ ││ └>00014d40: f9400be8 ldr x8, [sp, #16] <- 00014d3c(b)<stage2_free_walker+0x78> ││ stage2_free_walker:911.11 (pgtable.c) sbepe mm_ops->║put_page(kvm_pte_follow(pte, mm_ops)); ~ ││ 00014d44: f9401109 ldr x9, [x8, #32] ││ stage2_free_walker:911.35 (pgtable.c) sbepe mm_ops->put_page(kvm_pte_follow(║pte, mm_ops)); ~ ││ 00014d48: f94007e0 ldr x0, [sp, #8] ││ stage2_free_walker:911.20 (pgtable.c) sbepe mm_ops->put_page(║kvm_pte_follow(pte, mm_ops)); ~ ││ 00014d4c: aa0803e1 mov x1, x8 ~ ││ 00014d50: f90003e9 str x9, [sp] ~ ││ 00014d54: 9400014b bl 15280 <kvm_pte_follow> ││ ~ ││ 00014d58: f94003e8 ldr x8, [sp] <- 00014d54(bl-succ)<return> ││ stage2_free_walker:911.3 (pgtable.c) sbepe ║mm_ops->put_page(kvm_pte_follow(pte, mm_ops)); ~ ││ 00014d5c: d63f0100 blr x8 ~ ││ ┌─00014d60: 14000001 b 14d64 <stage2_free_walker+0x9c> ││ │ ~ │└>└>00014d64: 2a1f03e8 mov w8, wzr <- 00014d38(b.cc)<stage2_free_walker+0x9c>,00014d60(b)<stage2_free_walker+0x9c> stage2_free_walker:913.2 (pgtable.c) Sbepe ║return 0; ~ 00014d68: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00014d6c: 14000001 b 14d70 <stage2_free_walker+0xa8> │ │ │ │ stage2_free_walker:914.1 (pgtable.c) Sbepe ║} ~ └─>└>00014d70: b85fc3a0 ldur w0, [x29, #-4] <- 00014d18(b)<stage2_free_walker+0xa8>,00014d6c(b)<stage2_free_walker+0xa8> ~ 00014d74: a9457bfd ldp x29, x30, [sp, #80] ~ 00014d78: 910183ff add sp, sp, #0x60 00014cd4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014d7c: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x10) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x18) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14cc8 0x14d80 (DW_OP_fbreg -0x1c) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14cc8 0x14d80 (DW_OP_breg31 0x28) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:898 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x14cc8 0x14d80 (DW_OP_breg31 0x24) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:899 -arg param const(pointer(no type)) 0x14cc8 0x14d80 (DW_OP_breg31 0x18) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:900 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x14cc8 0x14d80 (DW_OP_breg31 0x10) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:902 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14cc8 0x14d80 (DW_OP_breg31 0x8) stage2_free_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:903 **00014d80 <kvm_pgd_page_idx>: + kvm_pgd_page_idx params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14d80 0x14dac (DW_OP_breg31 0x8) kvm_pgd_page_idx:101.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14d80 0x14dac (DW_OP_breg31 0x8) kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:100 ~ 00014d80: d10083ff sub sp, sp, #0x20 <- 00013878(bl)<kvm_pgd_page_idx> ~ 00014d84: a9017bfd stp x29, x30, [sp, #16] 00014d80 CFA:r31 r29:u r30:u ~ 00014d88: 910043fd add x29, sp, #0x10 ~ 00014d8c: f90007e0 str x0, [sp, #8] kvm_pgd_page_idx:102.28 (pgtable.c) SbePe return __kvm_pgd_page_idx(║data->pgt, data->addr); ~ 00014d90: f94007e8 ldr x8, [sp, #8] kvm_pgd_page_idx:102.34 (pgtable.c) sbepe return __kvm_pgd_page_idx(data->║pgt, data->addr); ~ 00014d94: f9400100 ldr x0, [x8] kvm_pgd_page_idx:102.45 (pgtable.c) sbepe return __kvm_pgd_page_idx(data->pgt, data->║addr); ~ 00014d98: f9400901 ldr x1, [x8, #16] kvm_pgd_page_idx:102.9 (pgtable.c) sbepe return ║__kvm_pgd_page_idx(data->pgt, data->addr); ~ 00014d9c: 9400004a bl 14ec4 <__kvm_pgd_page_idx> kvm_pgd_page_idx:102.2 (pgtable.c) sbepe ║return __kvm_pgd_page_idx(data->pgt, data->addr); ~ 00014da0: a9417bfd ldp x29, x30, [sp, #16] <- 00014d9c(bl-succ)<return> ~ 00014da4: 910083ff add sp, sp, #0x20 00014d8c CFA:r29+16 r29:c-16 r30:c-8 ~ 00014da8: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14d80 0x14dac (DW_OP_breg31 0x8) kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:100 **00014dac <__kvm_pgtable_walk>: + __kvm_pgtable_walk params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14dac 0x14ec4 (DW_OP_fbreg -0x10) +pgtable param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x1c) __kvm_pgtable_walk:249.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14dac 0x14ec4 (DW_OP_fbreg -0x10) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:247 +pgtable param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x18) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:248 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x1c) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:248 +idx var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14dac 0x14ec4 (DW_OP_breg31 0x20) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:250 +ret var int (base type, DW_ATE_signed size:4) 0x14dac 0x14ec4 (DW_OP_breg31 0x1c) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:251 ~ 00014dac: d10143ff sub sp, sp, #0x50 <- 000138c4(bl)<__kvm_pgtable_walk>,000150f4(bl)<__kvm_pgtable_walk> ~ 00014db0: a9047bfd stp x29, x30, [sp, #64] 00014dac CFA:r31 r29:u r30:u ~ 00014db4: 910103fd add x29, sp, #0x40 ~ 00014db8: f81f03a0 stur x0, [x29, #-16] ~ 00014dbc: f81e83a1 stur x1, [x29, #-24] ~ 00014dc0: b81e43a2 stur w2, [x29, #-28] ~ 00014dc4: 2a1f03e8 mov w8, wzr __kvm_pgtable_walk:251.6 (pgtable.c) SbePe int ║ret = 0; ~ 00014dc8: b9001fe8 str w8, [sp, #28] __kvm_pgtable_walk:253.6 (pgtable.c) Sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x14dcc 0x14e08 (DW_OP_breg31 0x18) lexblock:__kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:253 ~ 00014dcc: b85e43a8 ldur w8, [x29, #-28] ~ 00014dd0: 71000d08 subs w8, w8, #0x3 ~ 00014dd4: 1a9f97e9 cset w9, hi // hi = pmore ~ 00014dd8: b9001be9 str w9, [sp, #24] __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ 00014ddc: b9401be9 ldr w9, [sp, #24] __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ ┌───00014de0: 34000089 cbz w9, 14df0 <__kvm_pgtable_walk+0x44> ~ │ ┌─00014de4: 14000001 b 14de8 <__kvm_pgtable_walk+0x3c> <- 00014de0(b.cc-succ)<fallthrough> │ │ │ │ __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ │ └>00014de8: d4210000 brk #0x800 <- 00014de4(b)<__kvm_pgtable_walk+0x3c> ~ │ ┌─00014dec: 14000001 b 14df0 <__kvm_pgtable_walk+0x44> │ │ │ │ __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ └>└>00014df0: b9401be8 ldr w8, [sp, #24] <- 00014de0(b.cc)<__kvm_pgtable_walk+0x44>,00014dec(b)<__kvm_pgtable_walk+0x44> ~ 00014df4: 71000108 subs w8, w8, #0x0 ~ 00014df8: 1a9f07e9 cset w9, ne // ne = any ~ 00014dfc: 2a0903ea mov w10, w9 __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ 00014e00: f9000bea str x10, [sp, #16] __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ 00014e04: f9400bea ldr x10, [sp, #16] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x14dcc 0x14e08 (DW_OP_breg31 0x18) lexblock:__kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:253 __kvm_pgtable_walk:253.6 (pgtable.c) sbepe if (║WARN_ON_ONCE(level >= KVM_PGTABLE_MAX_LEVELS)) ~ ┌──00014e08: b40000aa cbz x10, 14e1c <__kvm_pgtable_walk+0x70> ~ │┌─00014e0c: 14000001 b 14e10 <__kvm_pgtable_walk+0x64> <- 00014e08(b.cc-succ)<fallthrough> ││ ~ │└>00014e10: 128002a8 mov w8, #0xffffffea // #-22 <- 00014e0c(b)<__kvm_pgtable_walk+0x64> __kvm_pgtable_walk:254.3 (pgtable.c) Sbepe ║return -EINVAL; ~ 00014e14: b81fc3a8 stur w8, [x29, #-4] ~ ┌──────┼──00014e18: 14000027 b 14eb4 <__kvm_pgtable_walk+0x108> │ │ │ │ __kvm_pgtable_walk:256.29 (pgtable.c) Sbepe for (idx = kvm_pgtable_idx(║data, level); idx < PTRS_PER_PTE; ++idx) { ~ │ └─>00014e1c: f85f03a0 ldur x0, [x29, #-16] <- 00014e08(b.cc)<__kvm_pgtable_walk+0x70> __kvm_pgtable_walk:256.35 (pgtable.c) sbepe for (idx = kvm_pgtable_idx(data, ║level); idx < PTRS_PER_PTE; ++idx) { ~ 00014e20: b85e43a1 ldur w1, [x29, #-28] __kvm_pgtable_walk:256.13 (pgtable.c) sbepe for (idx = ║kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ++idx) { ~ 00014e24: 9400004d bl 14f58 <kvm_pgtable_idx> __kvm_pgtable_walk:256.11 (pgtable.c) sbepe for (idx ║= kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ++idx) { ~ 00014e28: b90023e0 str w0, [sp, #32] <- 00014e24(bl-succ)<return> __kvm_pgtable_walk:256.7 (pgtable.c) sbepe for (║idx = kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ++idx) { ~ │ ┌─00014e2c: 14000001 b 14e30 <__kvm_pgtable_walk+0x84> │ │ │ │ __kvm_pgtable_walk:256.43 (pgtable.c) sbepe for (idx = kvm_pgtable_idx(data, level); ║idx < PTRS_PER_PTE; ++idx) { ~ │ ╔══>└>00014e30: b94023e8 ldr w8, [sp, #32] <- 00014e2c(b)<__kvm_pgtable_walk+0x84>,v00014ea4(b)<__kvm_pgtable_walk+0x84> │ ║ __kvm_pgtable_walk:256.2 (pgtable.c) sbepe ║for (idx = kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ++idx) { ~ │ ║ 00014e34: 7107fd08 subs w8, w8, #0x1ff ~ │┌──╫─────00014e38: 54000388 b.hi 14ea8 <__kvm_pgtable_walk+0xfc> // b.pmore ││ ║ ~ ││ ║ ┌─00014e3c: 14000001 b 14e40 <__kvm_pgtable_walk+0x94> <- 00014e38(b.cc-succ)<fallthrough> ││ ║ │ ││ ║ │ __kvm_pgtable_walk:257.22 (pgtable.c) Sbepe kvm_pte_t *ptep = &║pgtable[idx]; +ptep var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14e40 0x14e98 (DW_OP_breg31 0x8) lexblock:__kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:257 ~ ││ ║ └>00014e40: f85e83a8 ldur x8, [x29, #-24] <- 00014e3c(b)<__kvm_pgtable_walk+0x94> ││ ║ __kvm_pgtable_walk:257.30 (pgtable.c) sbepe kvm_pte_t *ptep = &pgtable[║idx]; ~ ││ ║ 00014e44: b94023e9 ldr w9, [sp, #32] ~ ││ ║ 00014e48: 2a0903ea mov w10, w9 ││ ║ __kvm_pgtable_walk:257.22 (pgtable.c) sbepe kvm_pte_t *ptep = &║pgtable[idx]; ~ ││ ║ 00014e4c: 8b0a0d08 add x8, x8, x10, lsl #3 ││ ║ __kvm_pgtable_walk:257.14 (pgtable.c) sbepe kvm_pte_t *║ptep = &pgtable[idx]; ~ ││ ║ 00014e50: f90007e8 str x8, [sp, #8] ││ ║ __kvm_pgtable_walk:259.7 (pgtable.c) Sbepe if (║data->addr >= data->end) ~ ││ ║ 00014e54: f85f03a8 ldur x8, [x29, #-16] ││ ║ __kvm_pgtable_walk:259.13 (pgtable.c) sbepe if (data->║addr >= data->end) ~ ││ ║ 00014e58: f940090a ldr x10, [x8, #16] ││ ║ __kvm_pgtable_walk:259.27 (pgtable.c) sbepe if (data->addr >= data->║end) ~ ││ ║ 00014e5c: f9400d08 ldr x8, [x8, #24] ││ ║ __kvm_pgtable_walk:259.7 (pgtable.c) sbepe if (║data->addr >= data->end) ~ ││ ║ 00014e60: eb080148 subs x8, x10, x8 ~ ││ ║ ┌──00014e64: 54000063 b.cc 14e70 <__kvm_pgtable_walk+0xc4> // b.lo, b.ul, b.last ││ ║ │ ~ ││ ║ │┌─00014e68: 14000001 b 14e6c <__kvm_pgtable_walk+0xc0> <- 00014e64(b.cc-succ)<fallthrough> ││ ║ ││ ││ ║ ││ __kvm_pgtable_walk:260.4 (pgtable.c) Sbepe ║break; ~ ││ ┌╫──┼└>00014e6c: 1400000f b 14ea8 <__kvm_pgtable_walk+0xfc> <- 00014e68(b)<__kvm_pgtable_walk+0xc0> ││ │║ │ ││ │║ │ __kvm_pgtable_walk:262.29 (pgtable.c) Sbepe ret = __kvm_pgtable_visit(║data, ptep, level); ~ ││ │║ └─>00014e70: f85f03a0 ldur x0, [x29, #-16] <- 00014e64(b.cc)<__kvm_pgtable_walk+0xc4> ││ │║ __kvm_pgtable_walk:262.35 (pgtable.c) sbepe ret = __kvm_pgtable_visit(data, ║ptep, level); ~ ││ │║ 00014e74: f94007e1 ldr x1, [sp, #8] ││ │║ __kvm_pgtable_walk:262.41 (pgtable.c) sbepe ret = __kvm_pgtable_visit(data, ptep, ║level); ~ ││ │║ 00014e78: b85e43a2 ldur w2, [x29, #-28] ││ │║ __kvm_pgtable_walk:262.9 (pgtable.c) sbepe ret = ║__kvm_pgtable_visit(data, ptep, level); ~ ││ │║ 00014e7c: 9400004b bl 14fa8 <__kvm_pgtable_visit> ││ │║ ││ │║ __kvm_pgtable_walk:262.7 (pgtable.c) sbepe ret ║= __kvm_pgtable_visit(data, ptep, level); ~ ││ │║ 00014e80: b9001fe0 str w0, [sp, #28] <- 00014e7c(bl-succ)<return> ││ │║ __kvm_pgtable_walk:263.7 (pgtable.c) Sbepe if (║ret) ~ ││ │║ 00014e84: b9401fe8 ldr w8, [sp, #28] ││ │║ __kvm_pgtable_walk:263.7 (pgtable.c) sbepe if (║ret) ~ ││ │║ ┌───00014e88: 34000068 cbz w8, 14e94 <__kvm_pgtable_walk+0xe8> ││ │║ │ ~ ││ │║ │ ┌─00014e8c: 14000001 b 14e90 <__kvm_pgtable_walk+0xe4> <- 00014e88(b.cc-succ)<fallthrough> ││ │║ │ │ ││ │║ │ │ __kvm_pgtable_walk:264.4 (pgtable.c) Sbepe ║break; ~ ││ │║┌┼─└>00014e90: 14000006 b 14ea8 <__kvm_pgtable_walk+0xfc> <- 00014e8c(b)<__kvm_pgtable_walk+0xe4> ││ │║││ ││ │║││ __kvm_pgtable_walk:265.2 (pgtable.c) Sbepe } ~ ││ │║│└>┌─00014e94: 14000001 b 14e98 <__kvm_pgtable_walk+0xec> <- 00014e88(b.cc)<__kvm_pgtable_walk+0xe8> -ptep var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14e40 0x14e98 (DW_OP_breg31 0x8) lexblock:__kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:257 ││ │║│ │ ││ │║│ │ __kvm_pgtable_walk:256.63 (pgtable.c) Sbepe for (idx = kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ║++idx) { ~ ││ │║│ └>00014e98: b94023e8 ldr w8, [sp, #32] <- 00014e94(b)<__kvm_pgtable_walk+0xec> ~ ││ │║│ 00014e9c: 11000508 add w8, w8, #0x1 ~ ││ │║│ 00014ea0: b90023e8 str w8, [sp, #32] ││ │║│ __kvm_pgtable_walk:256.2 (pgtable.c) sbepe ║for (idx = kvm_pgtable_idx(data, level); idx < PTRS_PER_PTE; ++idx) { ~ ││ │╚╪════00014ea4: 17ffffe3 b 14e30 <__kvm_pgtable_walk+0x84> ││ │ │ ││ │ │ __kvm_pgtable_walk:267.9 (pgtable.c) Sbepe return ║ret; ~ │└>└>└───>00014ea8: b9401fe8 ldr w8, [sp, #28] <- 00014e38(b.cc)<__kvm_pgtable_walk+0xfc>,00014e6c(b)<__kvm_pgtable_walk+0xfc>,00014e90(b)<__kvm_pgtable_walk+0xfc> __kvm_pgtable_walk:267.2 (pgtable.c) sbepe ║return ret; ~ 00014eac: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00014eb0: 14000001 b 14eb4 <__kvm_pgtable_walk+0x108> │ │ │ │ __kvm_pgtable_walk:268.1 (pgtable.c) Sbepe ║} ~ └──────>└>00014eb4: b85fc3a0 ldur w0, [x29, #-4] <- 00014e18(b)<__kvm_pgtable_walk+0x108>,00014eb0(b)<__kvm_pgtable_walk+0x108> ~ 00014eb8: a9447bfd ldp x29, x30, [sp, #64] ~ 00014ebc: 910143ff add sp, sp, #0x50 00014db8 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014ec0: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14dac 0x14ec4 (DW_OP_fbreg -0x10) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:247 -pgtable param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x18) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:248 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14dac 0x14ec4 (DW_OP_fbreg -0x1c) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:248 -idx var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14dac 0x14ec4 (DW_OP_breg31 0x20) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:250 -ret var int (base type, DW_ATE_signed size:4) 0x14dac 0x14ec4 (DW_OP_breg31 0x1c) __kvm_pgtable_walk:arch/arm64/kvm/hyp/nvhe/../pgtable.c:251 **00014ec4 <__kvm_pgd_page_idx>: + __kvm_pgd_page_idx params: +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14ec4 0x14f30 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x10) __kvm_pgd_page_idx:93.0 (pgtable.c) Sbepe ║{ +pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14ec4 0x14f30 (DW_OP_fbreg -0x8) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:92 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x10) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:92 +shift var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x8) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:94 +mask var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x0) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:95 ~ 00014ec4: d100c3ff sub sp, sp, #0x30 <- 00014bcc(bl)<__kvm_pgd_page_idx>,00014d9c(bl)<__kvm_pgd_page_idx> ~ 00014ec8: a9027bfd stp x29, x30, [sp, #32] 00014ec4 CFA:r31 r29:u r30:u ~ 00014ecc: 910083fd add x29, sp, #0x20 ~ 00014ed0: f81f83a0 stur x0, [x29, #-8] ~ 00014ed4: f9000be1 str x1, [sp, #16] __kvm_pgd_page_idx:94.32 (pgtable.c) SbePe u64 shift = kvm_granule_shift(║pgt->start_level - 1); /* May underflow */ ~ 00014ed8: f85f83a8 ldur x8, [x29, #-8] __kvm_pgd_page_idx:94.37 (pgtable.c) sbepe u64 shift = kvm_granule_shift(pgt->║start_level - 1); /* May underflow */ ~ 00014edc: b9400509 ldr w9, [x8, #4] __kvm_pgd_page_idx:94.49 (pgtable.c) sbepe u64 shift = kvm_granule_shift(pgt->start_level ║- 1); /* May underflow */ ~ 00014ee0: 71000520 subs w0, w9, #0x1 __kvm_pgd_page_idx:94.14 (pgtable.c) sbepe u64 shift = ║kvm_granule_shift(pgt->start_level - 1); /* May underflow */ ~ 00014ee4: 94000013 bl 14f30 <kvm_granule_shift> __kvm_pgd_page_idx:94.6 (pgtable.c) sbepe u64 ║shift = kvm_granule_shift(pgt->start_level - 1); /* May underflow */ ~ 00014ee8: f90007e0 str x0, [sp, #8] <- 00014ee4(bl-succ)<return> __kvm_pgd_page_idx:95.13 (pgtable.c) Sbepe u64 mask = ║BIT(pgt->ia_bits) - 1; ~ 00014eec: f85f83a8 ldur x8, [x29, #-8] ~ 00014ef0: b9400109 ldr w9, [x8] ~ 00014ef4: 2a0903e8 mov w8, w9 ~ 00014ef8: 52800029 mov w9, #0x1 // #1 ~ 00014efc: 2a0903ea mov w10, w9 ~ 00014f00: 9ac82148 lsl x8, x10, x8 __kvm_pgd_page_idx:95.31 (pgtable.c) sbepe u64 mask = BIT(pgt->ia_bits) ║- 1; ~ 00014f04: f1000508 subs x8, x8, #0x1 __kvm_pgd_page_idx:95.6 (pgtable.c) sbepe u64 ║mask = BIT(pgt->ia_bits) - 1; ~ 00014f08: f90003e8 str x8, [sp] __kvm_pgd_page_idx:97.10 (pgtable.c) Sbepe return (║addr & mask) >> shift; ~ 00014f0c: f9400be8 ldr x8, [sp, #16] __kvm_pgd_page_idx:97.17 (pgtable.c) sbepe return (addr & ║mask) >> shift; ~ 00014f10: f94003ea ldr x10, [sp] __kvm_pgd_page_idx:97.15 (pgtable.c) sbepe return (addr ║& mask) >> shift; ~ 00014f14: 8a0a0108 and x8, x8, x10 __kvm_pgd_page_idx:97.26 (pgtable.c) sbepe return (addr & mask) >> ║shift; ~ 00014f18: f94007ea ldr x10, [sp, #8] __kvm_pgd_page_idx:97.23 (pgtable.c) sbepe return (addr & mask) ║>> shift; ~ 00014f1c: 9aca2508 lsr x8, x8, x10 __kvm_pgd_page_idx:97.2 (pgtable.c) sbepe ║return (addr & mask) >> shift; ~ 00014f20: 2a0803e0 mov w0, w8 ~ 00014f24: a9427bfd ldp x29, x30, [sp, #32] ~ 00014f28: 9100c3ff add sp, sp, #0x30 00014ed0 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014f2c: d65f03c0 ret -pgt param pointer(struct kvm_pgtable<d70f1>/<d8ea9>) 0x14ec4 0x14f30 (DW_OP_fbreg -0x8) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:92 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x10) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:92 -shift var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x8) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:94 -mask var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14ec4 0x14f30 (DW_OP_breg31 0x0) __kvm_pgd_page_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:95 **00014f30 <kvm_granule_shift>: + kvm_granule_shift params: +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f30 0x14f58 (DW_OP_fbreg 0xc) kvm_granule_shift:57.0 (pgtable.c) Sbepe ║{ 00014f30 CFA:r31 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f30 0x14f58 (DW_OP_fbreg 0xc) kvm_granule_shift:arch/arm64/kvm/hyp/nvhe/../pgtable.c:56 ~ 00014f30: d10043ff sub sp, sp, #0x10 <- 00014ee4(bl)<kvm_granule_shift>,00014f70(bl)<kvm_granule_shift>,00015264(bl)<kvm_granule_shift> ~ 00014f34: b9000fe0 str w0, [sp, #12] kvm_granule_shift:59.9 (pgtable.c) SbePe return ║ARM64_HW_PGTABLE_LEVEL_SHIFT(level); ~ 00014f38: b9400fe8 ldr w8, [sp, #12] ~ 00014f3c: 52800089 mov w9, #0x4 // #4 ~ 00014f40: 6b080128 subs w8, w9, w8 ~ 00014f44: 0b080d08 add w8, w8, w8, lsl #3 ~ 00014f48: 11000d08 add w8, w8, #0x3 ~ 00014f4c: 2a0803e0 mov w0, w8 kvm_granule_shift:59.2 (pgtable.c) sbepe ║return ARM64_HW_PGTABLE_LEVEL_SHIFT(level); ~ 00014f50: 910043ff add sp, sp, #0x10 00014f34 CFA:r31+16 ~ 00014f54: d65f03c0 ret -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f30 0x14f58 (DW_OP_fbreg 0xc) kvm_granule_shift:arch/arm64/kvm/hyp/nvhe/../pgtable.c:56 **00014f58 <kvm_pgtable_idx>: + kvm_pgtable_idx params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14f58 0x14fa8 (DW_OP_fbreg -0x8) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f58 0x14fa8 (DW_OP_fbreg -0xc) kvm_pgtable_idx:85.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14f58 0x14fa8 (DW_OP_fbreg -0x8) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:84 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f58 0x14fa8 (DW_OP_fbreg -0xc) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:84 +shift var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14f58 0x14fa8 (DW_OP_breg31 0x8) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:86 +mask var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14f58 0x14fa8 (DW_OP_breg31 0x0) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:87 ~ 00014f58: d100c3ff sub sp, sp, #0x30 <- 00014e24(bl)<kvm_pgtable_idx> ~ 00014f5c: a9027bfd stp x29, x30, [sp, #32] 00014f58 CFA:r31 r29:u r30:u ~ 00014f60: 910083fd add x29, sp, #0x20 ~ 00014f64: f81f83a0 stur x0, [x29, #-8] ~ 00014f68: b81f43a1 stur w1, [x29, #-12] kvm_pgtable_idx:86.32 (pgtable.c) SbePe u64 shift = kvm_granule_shift(║level); ~ 00014f6c: b85f43a0 ldur w0, [x29, #-12] kvm_pgtable_idx:86.14 (pgtable.c) sbepe u64 shift = ║kvm_granule_shift(level); ~ 00014f70: 97fffff0 bl 14f30 <kvm_granule_shift> kvm_pgtable_idx:86.6 (pgtable.c) sbepe u64 ║shift = kvm_granule_shift(level); ~ 00014f74: f90007e0 str x0, [sp, #8] <- 00014f70(bl-succ)<return> ~ 00014f78: 52803fe8 mov w8, #0x1ff // #511 ~ 00014f7c: 2a0803e9 mov w9, w8 kvm_pgtable_idx:87.6 (pgtable.c) Sbepe u64 ║mask = BIT(PAGE_SHIFT - 3) - 1; ~ 00014f80: f90003e9 str x9, [sp] kvm_pgtable_idx:89.10 (pgtable.c) Sbepe return (║data->addr >> shift) & mask; ~ 00014f84: f85f83a9 ldur x9, [x29, #-8] kvm_pgtable_idx:89.16 (pgtable.c) sbepe return (data->║addr >> shift) & mask; ~ 00014f88: f9400929 ldr x9, [x9, #16] kvm_pgtable_idx:89.24 (pgtable.c) sbepe return (data->addr >> ║shift) & mask; ~ 00014f8c: f94007ea ldr x10, [sp, #8] kvm_pgtable_idx:89.21 (pgtable.c) sbepe return (data->addr ║>> shift) & mask; ~ 00014f90: 9aca2529 lsr x9, x9, x10 kvm_pgtable_idx:89.33 (pgtable.c) sbepe return (data->addr >> shift) & ║mask; ~ 00014f94: b94003e8 ldr w8, [sp] kvm_pgtable_idx:89.31 (pgtable.c) sbepe return (data->addr >> shift) ║& mask; ~ 00014f98: 0a080120 and w0, w9, w8 kvm_pgtable_idx:89.2 (pgtable.c) sbepe ║return (data->addr >> shift) & mask; ~ 00014f9c: a9427bfd ldp x29, x30, [sp, #32] ~ 00014fa0: 9100c3ff add sp, sp, #0x30 00014f64 CFA:r29+16 r29:c-16 r30:c-8 ~ 00014fa4: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14f58 0x14fa8 (DW_OP_fbreg -0x8) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:84 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14f58 0x14fa8 (DW_OP_fbreg -0xc) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:84 -shift var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14f58 0x14fa8 (DW_OP_breg31 0x8) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:86 -mask var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14f58 0x14fa8 (DW_OP_breg31 0x0) kvm_pgtable_idx:arch/arm64/kvm/hyp/nvhe/../pgtable.c:87 **00014fa8 <__kvm_pgtable_visit>: + __kvm_pgtable_visit params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14fa8 0x1514c (DW_OP_fbreg -0x8) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14fa8 0x1514c (DW_OP_fbreg -0x10) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14fa8 0x1514c (DW_OP_fbreg -0x14) __kvm_pgtable_visit:206.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14fa8 0x1514c (DW_OP_fbreg -0x8) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:204 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14fa8 0x1514c (DW_OP_fbreg -0x10) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:205 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14fa8 0x1514c (DW_OP_fbreg -0x14) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:205 +ret var int (base type, DW_ATE_signed size:4) 0x14fa8 0x1514c (DW_OP_fbreg -0x18) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:207 +addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14fa8 0x1514c (DW_OP_breg31 0x20) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:208 +childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14fa8 0x1514c (DW_OP_breg31 0x18) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:209 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14fa8 0x1514c (DW_OP_breg31 0x10) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:209 +table var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14fa8 0x1514c (DW_OP_breg31 0xc) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:210 +flags var enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x14fa8 0x1514c (DW_OP_breg31 0x8) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:211 ~ 00014fa8: d10143ff sub sp, sp, #0x50 <- 00014e7c(bl)<__kvm_pgtable_visit> ~ 00014fac: a9047bfd stp x29, x30, [sp, #64] 00014fa8 CFA:r31 r29:u r30:u ~ 00014fb0: 910103fd add x29, sp, #0x40 ~ 00014fb4: f81f83a0 stur x0, [x29, #-8] ~ 00014fb8: f81f03a1 stur x1, [x29, #-16] ~ 00014fbc: b81ec3a2 stur w2, [x29, #-20] ~ 00014fc0: 2a1f03e8 mov w8, wzr __kvm_pgtable_visit:207.6 (pgtable.c) SbePe int ║ret = 0; ~ 00014fc4: b81e83a8 stur w8, [x29, #-24] __kvm_pgtable_visit:208.13 (pgtable.c) Sbepe u64 addr = ║data->addr; ~ 00014fc8: f85f83a9 ldur x9, [x29, #-8] __kvm_pgtable_visit:208.19 (pgtable.c) sbepe u64 addr = data->║addr; ~ 00014fcc: f9400929 ldr x9, [x9, #16] __kvm_pgtable_visit:208.6 (pgtable.c) sbepe u64 ║addr = data->addr; ~ 00014fd0: f90013e9 str x9, [sp, #32] __kvm_pgtable_visit:209.28 (pgtable.c) Sbepe kvm_pte_t *childp, pte = *║ptep; ~ 00014fd4: f85f03a9 ldur x9, [x29, #-16] __kvm_pgtable_visit:209.27 (pgtable.c) sbepe kvm_pte_t *childp, pte = ║*ptep; ~ 00014fd8: f9400129 ldr x9, [x9] __kvm_pgtable_visit:209.21 (pgtable.c) sbepe kvm_pte_t *childp, ║pte = *ptep; ~ 00014fdc: f9000be9 str x9, [sp, #16] __kvm_pgtable_visit:210.29 (pgtable.c) Sbepe bool table = kvm_pte_table(║pte, level); ~ 00014fe0: f9400be0 ldr x0, [sp, #16] __kvm_pgtable_visit:210.34 (pgtable.c) sbepe bool table = kvm_pte_table(pte, ║level); ~ 00014fe4: b85ec3a1 ldur w1, [x29, #-20] __kvm_pgtable_visit:210.15 (pgtable.c) sbepe bool table = ║kvm_pte_table(pte, level); ~ 00014fe8: 94000059 bl 1514c <kvm_pte_table> __kvm_pgtable_visit:210.7 (pgtable.c) sbepe bool ║table = kvm_pte_table(pte, level); ~ 00014fec: 12000008 and w8, w0, #0x1 <- 00014fe8(bl-succ)<return> ~ 00014ff0: 390033e8 strb w8, [sp, #12] __kvm_pgtable_visit:211.38 (pgtable.c) Sbepe enum kvm_pgtable_walk_flags flags = ║data->walker->flags; ~ 00014ff4: f85f83a9 ldur x9, [x29, #-8] __kvm_pgtable_visit:211.44 (pgtable.c) sbepe enum kvm_pgtable_walk_flags flags = data->║walker->flags; ~ 00014ff8: f9400529 ldr x9, [x9, #8] __kvm_pgtable_visit:211.52 (pgtable.c) sbepe enum kvm_pgtable_walk_flags flags = data->walker->║flags; ~ 00014ffc: b9401128 ldr w8, [x9, #16] __kvm_pgtable_visit:211.30 (pgtable.c) sbepe enum kvm_pgtable_walk_flags ║flags = data->walker->flags; ~ 00015000: b9000be8 str w8, [sp, #8] __kvm_pgtable_visit:213.6 (pgtable.c) Sbepe if (║table && (flags & KVM_PGTABLE_WALK_TABLE_PRE)) { ~ 00015004: 394033e8 ldrb w8, [sp, #12] __kvm_pgtable_visit:213.12 (pgtable.c) sbepe if (table ║&& (flags & KVM_PGTABLE_WALK_TABLE_PRE)) { ~ ┌─────00015008: 360001a8 tbz w8, #0, 1503c <__kvm_pgtable_visit+0x94> ~ │ ┌─0001500c: 14000001 b 15010 <__kvm_pgtable_visit+0x68> <- 00015008(b.cc-succ)<fallthrough> │ │ │ │ __kvm_pgtable_visit:213.6 (pgtable.c) sbepe if (║table && (flags & KVM_PGTABLE_WALK_TABLE_PRE)) { ~ │ └>00015010: 394023e8 ldrb w8, [sp, #8] <- 0001500c(b)<__kvm_pgtable_visit+0x68> ~ │ ┌───00015014: 36080148 tbz w8, #1, 1503c <__kvm_pgtable_visit+0x94> │ │ ~ │ │ ┌─00015018: 14000001 b 1501c <__kvm_pgtable_visit+0x74> <- 00015014(b.cc-succ)<fallthrough> │ │ │ │ │ │ __kvm_pgtable_visit:214.32 (pgtable.c) Sbepe ret = kvm_pgtable_visitor_cb(║data, addr, level, ptep, ~ │ │ └>0001501c: f85f83a0 ldur x0, [x29, #-8] <- 00015018(b)<__kvm_pgtable_visit+0x74> │ │ __kvm_pgtable_visit:214.38 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, ║addr, level, ptep, ~ │ │ 00015020: f94013e1 ldr x1, [sp, #32] │ │ __kvm_pgtable_visit:214.44 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, ║level, ptep, ~ │ │ 00015024: b85ec3a2 ldur w2, [x29, #-20] │ │ __kvm_pgtable_visit:214.51 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, level, ║ptep, ~ │ │ 00015028: f85f03a3 ldur x3, [x29, #-16] ~ │ │ 0001502c: 52800044 mov w4, #0x2 // #2 │ │ __kvm_pgtable_visit:214.9 (pgtable.c) sbepe ret = ║kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ 00015030: 94000070 bl 151f0 <kvm_pgtable_visitor_cb> │ │ │ │ __kvm_pgtable_visit:214.7 (pgtable.c) sbepe ret ║= kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ 00015034: b81e83a0 stur w0, [x29, #-24] <- 00015030(bl-succ)<return> │ │ __kvm_pgtable_visit:216.2 (pgtable.c) Sbepe } ~ │ │ ┌─00015038: 14000001 b 1503c <__kvm_pgtable_visit+0x94> │ │ │ │ │ │ __kvm_pgtable_visit:218.7 (pgtable.c) Sbepe if (!║table && (flags & KVM_PGTABLE_WALK_LEAF)) { ~ └>└>└>0001503c: 394033e8 ldrb w8, [sp, #12] <- 00015008(b.cc)<__kvm_pgtable_visit+0x94>,00015014(b.cc)<__kvm_pgtable_visit+0x94>,00015038(b)<__kvm_pgtable_visit+0x94> __kvm_pgtable_visit:218.13 (pgtable.c) sbepe if (!table ║&& (flags & KVM_PGTABLE_WALK_LEAF)) { ~ ┌─────00015040: 370002a8 tbnz w8, #0, 15094 <__kvm_pgtable_visit+0xec> ~ │ ┌─00015044: 14000001 b 15048 <__kvm_pgtable_visit+0xa0> <- 00015040(b.cc-succ)<fallthrough> │ │ │ │ __kvm_pgtable_visit:218.6 (pgtable.c) sbepe if (║!table && (flags & KVM_PGTABLE_WALK_LEAF)) { ~ │ └>00015048: 394023e8 ldrb w8, [sp, #8] <- 00015044(b)<__kvm_pgtable_visit+0xa0> ~ │ ┌───0001504c: 36000248 tbz w8, #0, 15094 <__kvm_pgtable_visit+0xec> │ │ ~ │ │ ┌─00015050: 14000001 b 15054 <__kvm_pgtable_visit+0xac> <- 0001504c(b.cc-succ)<fallthrough> │ │ │ │ │ │ __kvm_pgtable_visit:219.32 (pgtable.c) Sbepe ret = kvm_pgtable_visitor_cb(║data, addr, level, ptep, ~ │ │ └>00015054: f85f83a0 ldur x0, [x29, #-8] <- 00015050(b)<__kvm_pgtable_visit+0xac> │ │ __kvm_pgtable_visit:219.38 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, ║addr, level, ptep, ~ │ │ 00015058: f94013e1 ldr x1, [sp, #32] │ │ __kvm_pgtable_visit:219.44 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, ║level, ptep, ~ │ │ 0001505c: b85ec3a2 ldur w2, [x29, #-20] │ │ __kvm_pgtable_visit:219.51 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, level, ║ptep, ~ │ │ 00015060: f85f03a3 ldur x3, [x29, #-16] ~ │ │ 00015064: 52800024 mov w4, #0x1 // #1 │ │ __kvm_pgtable_visit:219.9 (pgtable.c) sbepe ret = ║kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ 00015068: 94000062 bl 151f0 <kvm_pgtable_visitor_cb> │ │ │ │ __kvm_pgtable_visit:219.7 (pgtable.c) sbepe ret ║= kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ 0001506c: b81e83a0 stur w0, [x29, #-24] <- 00015068(bl-succ)<return> │ │ __kvm_pgtable_visit:221.10 (pgtable.c) Sbepe pte = *║ptep; ~ │ │ 00015070: f85f03a8 ldur x8, [x29, #-16] │ │ __kvm_pgtable_visit:221.9 (pgtable.c) sbepe pte = ║*ptep; ~ │ │ 00015074: f9400108 ldr x8, [x8] │ │ __kvm_pgtable_visit:221.7 (pgtable.c) sbepe pte ║= *ptep; ~ │ │ 00015078: f9000be8 str x8, [sp, #16] │ │ __kvm_pgtable_visit:222.25 (pgtable.c) Sbepe table = kvm_pte_table(║pte, level); ~ │ │ 0001507c: f9400be0 ldr x0, [sp, #16] │ │ __kvm_pgtable_visit:222.30 (pgtable.c) sbepe table = kvm_pte_table(pte, ║level); ~ │ │ 00015080: b85ec3a1 ldur w1, [x29, #-20] │ │ __kvm_pgtable_visit:222.11 (pgtable.c) sbepe table = ║kvm_pte_table(pte, level); ~ │ │ 00015084: 94000032 bl 1514c <kvm_pte_table> │ │ │ │ __kvm_pgtable_visit:222.9 (pgtable.c) sbepe table ║= kvm_pte_table(pte, level); ~ │ │ 00015088: 12000009 and w9, w0, #0x1 <- 00015084(bl-succ)<return> ~ │ │ 0001508c: 390033e9 strb w9, [sp, #12] │ │ __kvm_pgtable_visit:223.2 (pgtable.c) Sbepe } ~ │ │ ┌─00015090: 14000001 b 15094 <__kvm_pgtable_visit+0xec> │ │ │ │ │ │ __kvm_pgtable_visit:225.6 (pgtable.c) Sbepe if (║ret) ~ └>└>└>00015094: b85e83a8 ldur w8, [x29, #-24] <- 00015040(b.cc)<__kvm_pgtable_visit+0xec>,0001504c(b.cc)<__kvm_pgtable_visit+0xec>,00015090(b)<__kvm_pgtable_visit+0xec> __kvm_pgtable_visit:225.6 (pgtable.c) sbepe if (║ret) ~ ┌──00015098: 34000068 cbz w8, 150a4 <__kvm_pgtable_visit+0xfc> ~ │┌─0001509c: 14000001 b 150a0 <__kvm_pgtable_visit+0xf8> <- 00015098(b.cc-succ)<fallthrough> ││ ││ __kvm_pgtable_visit:226.3 (pgtable.c) Sbepe ║goto out; ~ ┌───────┼└>000150a0: 14000027 b 1513c <__kvm_pgtable_visit+0x194> <- 0001509c(b)<__kvm_pgtable_visit+0xf8> │ │ │ │ __kvm_pgtable_visit:228.7 (pgtable.c) Sbepe if (!║table) { ~ │ └─>000150a4: 394033e8 ldrb w8, [sp, #12] <- 00015098(b.cc)<__kvm_pgtable_visit+0xfc> __kvm_pgtable_visit:228.6 (pgtable.c) sbepe if (║!table) { ~ │ ┌──000150a8: 37000128 tbnz w8, #0, 150cc <__kvm_pgtable_visit+0x124> │ │ ~ │ │┌─000150ac: 14000001 b 150b0 <__kvm_pgtable_visit+0x108> <- 000150a8(b.cc-succ)<fallthrough> │ ││ │ ││ __kvm_pgtable_visit:229.34 (pgtable.c) Sbepe data->addr += kvm_granule_size(║level); ~ │ │└>000150b0: b85ec3a0 ldur w0, [x29, #-20] <- 000150ac(b)<__kvm_pgtable_visit+0x108> │ │ __kvm_pgtable_visit:229.17 (pgtable.c) sbepe data->addr += ║kvm_granule_size(level); ~ │ │ 000150b4: 94000067 bl 15250 <kvm_granule_size> │ │ │ │ __kvm_pgtable_visit:229.3 (pgtable.c) sbepe ║data->addr += kvm_granule_size(level); ~ │ │ 000150b8: f85f83a8 ldur x8, [x29, #-8] <- 000150b4(bl-succ)<return> │ │ __kvm_pgtable_visit:229.14 (pgtable.c) sbepe data->addr ║+= kvm_granule_size(level); ~ │ │ 000150bc: f9400909 ldr x9, [x8, #16] ~ │ │ 000150c0: 8b000129 add x9, x9, x0 ~ │ │ 000150c4: f9000909 str x9, [x8, #16] │ │ __kvm_pgtable_visit:230.3 (pgtable.c) Sbepe ║goto out; ~ │ ┌─────┼──000150c8: 1400001d b 1513c <__kvm_pgtable_visit+0x194> │ │ │ │ │ │ __kvm_pgtable_visit:233.26 (pgtable.c) Sbepe childp = kvm_pte_follow(║pte, data->pgt->mm_ops); ~ │ │ └─>000150cc: f9400be0 ldr x0, [sp, #16] <- 000150a8(b.cc)<__kvm_pgtable_visit+0x124> │ │ __kvm_pgtable_visit:233.31 (pgtable.c) sbepe childp = kvm_pte_follow(pte, ║data->pgt->mm_ops); ~ │ │ 000150d0: f85f83a8 ldur x8, [x29, #-8] │ │ __kvm_pgtable_visit:233.37 (pgtable.c) sbepe childp = kvm_pte_follow(pte, data->║pgt->mm_ops); ~ │ │ 000150d4: f9400108 ldr x8, [x8] │ │ __kvm_pgtable_visit:233.42 (pgtable.c) sbepe childp = kvm_pte_follow(pte, data->pgt->║mm_ops); ~ │ │ 000150d8: f9400901 ldr x1, [x8, #16] │ │ __kvm_pgtable_visit:233.11 (pgtable.c) sbepe childp = ║kvm_pte_follow(pte, data->pgt->mm_ops); ~ │ │ 000150dc: 94000069 bl 15280 <kvm_pte_follow> │ │ │ │ __kvm_pgtable_visit:233.9 (pgtable.c) sbepe childp ║= kvm_pte_follow(pte, data->pgt->mm_ops); ~ │ │ 000150e0: f9000fe0 str x0, [sp, #24] <- 000150dc(bl-succ)<return> │ │ __kvm_pgtable_visit:234.27 (pgtable.c) Sbepe ret = __kvm_pgtable_walk(║data, childp, level + 1); ~ │ │ 000150e4: f85f83a0 ldur x0, [x29, #-8] │ │ __kvm_pgtable_visit:234.33 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, ║childp, level + 1); ~ │ │ 000150e8: f9400fe1 ldr x1, [sp, #24] │ │ __kvm_pgtable_visit:234.41 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, childp, ║level + 1); ~ │ │ 000150ec: b85ec3a9 ldur w9, [x29, #-20] │ │ __kvm_pgtable_visit:234.47 (pgtable.c) sbepe ret = __kvm_pgtable_walk(data, childp, level ║+ 1); ~ │ │ 000150f0: 11000522 add w2, w9, #0x1 │ │ __kvm_pgtable_visit:234.8 (pgtable.c) sbepe ret = ║__kvm_pgtable_walk(data, childp, level + 1); ~ │ │ 000150f4: 97ffff2e bl 14dac <__kvm_pgtable_walk> │ │ │ │ __kvm_pgtable_visit:234.6 (pgtable.c) sbepe ret ║= __kvm_pgtable_walk(data, childp, level + 1); ~ │ │ 000150f8: b81e83a0 stur w0, [x29, #-24] <- 000150f4(bl-succ)<return> │ │ __kvm_pgtable_visit:235.6 (pgtable.c) Sbepe if (║ret) ~ │ │ 000150fc: b85e83a9 ldur w9, [x29, #-24] │ │ __kvm_pgtable_visit:235.6 (pgtable.c) sbepe if (║ret) ~ │ │ ┌──00015100: 34000069 cbz w9, 1510c <__kvm_pgtable_visit+0x164> │ │ │ ~ │ │ │┌─00015104: 14000001 b 15108 <__kvm_pgtable_visit+0x160> <- 00015100(b.cc-succ)<fallthrough> │ │ ││ │ │ ││ __kvm_pgtable_visit:236.3 (pgtable.c) Sbepe ║goto out; ~ │ │ ┌───┼└>00015108: 1400000d b 1513c <__kvm_pgtable_visit+0x194> <- 00015104(b)<__kvm_pgtable_visit+0x160> │ │ │ │ │ │ │ │ __kvm_pgtable_visit:238.6 (pgtable.c) Sbepe if (║flags & KVM_PGTABLE_WALK_TABLE_POST) { ~ │ │ │ └─>0001510c: 394023e8 ldrb w8, [sp, #8] <- 00015100(b.cc)<__kvm_pgtable_visit+0x164> ~ │ │ │┌─────00015110: 36100148 tbz w8, #2, 15138 <__kvm_pgtable_visit+0x190> │ │ ││ ~ │ │ ││ ┌─00015114: 14000001 b 15118 <__kvm_pgtable_visit+0x170> <- 00015110(b.cc-succ)<fallthrough> │ │ ││ │ │ │ ││ │ __kvm_pgtable_visit:239.32 (pgtable.c) Sbepe ret = kvm_pgtable_visitor_cb(║data, addr, level, ptep, ~ │ │ ││ └>00015118: f85f83a0 ldur x0, [x29, #-8] <- 00015114(b)<__kvm_pgtable_visit+0x170> │ │ ││ __kvm_pgtable_visit:239.38 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, ║addr, level, ptep, ~ │ │ ││ 0001511c: f94013e1 ldr x1, [sp, #32] │ │ ││ __kvm_pgtable_visit:239.44 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, ║level, ptep, ~ │ │ ││ 00015120: b85ec3a2 ldur w2, [x29, #-20] │ │ ││ __kvm_pgtable_visit:239.51 (pgtable.c) sbepe ret = kvm_pgtable_visitor_cb(data, addr, level, ║ptep, ~ │ │ ││ 00015124: f85f03a3 ldur x3, [x29, #-16] ~ │ │ ││ 00015128: 52800084 mov w4, #0x4 // #4 │ │ ││ __kvm_pgtable_visit:239.9 (pgtable.c) sbepe ret = ║kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ ││ 0001512c: 94000031 bl 151f0 <kvm_pgtable_visitor_cb> │ │ ││ │ │ ││ __kvm_pgtable_visit:239.7 (pgtable.c) sbepe ret ║= kvm_pgtable_visitor_cb(data, addr, level, ptep, ~ │ │ ││ 00015130: b81e83a0 stur w0, [x29, #-24] <- 0001512c(bl-succ)<return> │ │ ││ __kvm_pgtable_visit:241.2 (pgtable.c) Sbepe } ~ │ │ ││ ┌─00015134: 14000001 b 15138 <__kvm_pgtable_visit+0x190> │ │ ││ │ │ │ ││ │ __kvm_pgtable_visit:238.14 (pgtable.c) Sbepe if (flags & ║KVM_PGTABLE_WALK_TABLE_POST) { ~ │ │ │└>┌─└>00015138: 14000001 b 1513c <__kvm_pgtable_visit+0x194> <- 00015110(b.cc)<__kvm_pgtable_visit+0x190>,00015134(b)<__kvm_pgtable_visit+0x190> │ │ │ │ │ │ │ │ __kvm_pgtable_visit:244.9 (pgtable.c) Sbepe return ║ret; ~ └>└>└─>└──>0001513c: b85e83a0 ldur w0, [x29, #-24] <- 000150a0(b)<__kvm_pgtable_visit+0x194>,000150c8(b)<__kvm_pgtable_visit+0x194>,00015108(b)<__kvm_pgtable_visit+0x194>,00015138(b)<__kvm_pgtable_visit+0x194> __kvm_pgtable_visit:244.2 (pgtable.c) sbepe ║return ret; ~ 00015140: a9447bfd ldp x29, x30, [sp, #64] ~ 00015144: 910143ff add sp, sp, #0x50 00014fb4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015148: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x14fa8 0x1514c (DW_OP_fbreg -0x8) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:204 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14fa8 0x1514c (DW_OP_fbreg -0x10) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:205 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x14fa8 0x1514c (DW_OP_fbreg -0x14) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:205 -ret var int (base type, DW_ATE_signed size:4) 0x14fa8 0x1514c (DW_OP_fbreg -0x18) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:207 -addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x14fa8 0x1514c (DW_OP_breg31 0x20) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:208 -childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x14fa8 0x1514c (DW_OP_breg31 0x18) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:209 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x14fa8 0x1514c (DW_OP_breg31 0x10) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:209 -table var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x14fa8 0x1514c (DW_OP_breg31 0xc) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:210 -flags var enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x14fa8 0x1514c (DW_OP_breg31 0x8) __kvm_pgtable_visit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:211 **0001514c <kvm_pte_table>: + kvm_pte_table params: +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1514c 0x151f0 (DW_OP_breg31 0x10) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1514c 0x151f0 (DW_OP_breg31 0xc) kvm_pte_table:121.0 (pgtable.c) Sbepe ║{ +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1514c 0x151f0 (DW_OP_breg31 0x10) kvm_pte_table:arch/arm64/kvm/hyp/nvhe/../pgtable.c:120 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1514c 0x151f0 (DW_OP_breg31 0xc) kvm_pte_table:arch/arm64/kvm/hyp/nvhe/../pgtable.c:120 ~ 0001514c: d100c3ff sub sp, sp, #0x30 <- 0001442c(bl)<kvm_pte_table>,00014d34(bl)<kvm_pte_table>,00014fe8(bl)<kvm_pte_table>,00015084(bl)<kvm_pte_table> ~ 00015150: a9027bfd stp x29, x30, [sp, #32] 0001514c CFA:r31 r29:u r30:u ~ 00015154: 910083fd add x29, sp, #0x20 ~ 00015158: f9000be0 str x0, [sp, #16] ~ 0001515c: b9000fe1 str w1, [sp, #12] kvm_pte_table:122.6 (pgtable.c) SbePe if (║level == KVM_PGTABLE_MAX_LEVELS - 1) ~ 00015160: b9400fe8 ldr w8, [sp, #12] kvm_pte_table:122.6 (pgtable.c) sbepe if (║level == KVM_PGTABLE_MAX_LEVELS - 1) ~ 00015164: 71000d08 subs w8, w8, #0x3 ~ ┌──00015168: 540000a1 b.ne 1517c <kvm_pte_table+0x30> // b.any ~ │┌─0001516c: 14000001 b 15170 <kvm_pte_table+0x24> <- 00015168(b.cc-succ)<fallthrough> ││ ~ │└>00015170: 2a1f03e8 mov w8, wzr <- 0001516c(b)<kvm_pte_table+0x24> kvm_pte_table:123.3 (pgtable.c) Sbepe ║return false; ~ 00015174: 381ff3a8 sturb w8, [x29, #-1] ~ ┌───┼──00015178: 1400001a b 151e0 <kvm_pte_table+0x94> │ │ │ │ kvm_pte_table:125.21 (pgtable.c) Sbepe if (!kvm_pte_valid(║pte)) ~ │ └─>0001517c: f9400be0 ldr x0, [sp, #16] <- 00015168(b.cc)<kvm_pte_table+0x30> kvm_pte_table:125.7 (pgtable.c) sbepe if (!║kvm_pte_valid(pte)) ~ 00015180: 9400004f bl 152bc <kvm_pte_valid> kvm_pte_table:125.6 (pgtable.c) sbepe if (║!kvm_pte_valid(pte)) ~ │ ┌───00015184: 370000a0 tbnz w0, #0, 15198 <kvm_pte_table+0x4c> <- 00015180(bl-succ)<return> │ │ ~ │ │ ┌─00015188: 14000001 b 1518c <kvm_pte_table+0x40> <- 00015184(b.cc-succ)<fallthrough> │ │ │ ~ │ │ └>0001518c: 2a1f03e8 mov w8, wzr <- 00015188(b)<kvm_pte_table+0x40> │ │ kvm_pte_table:126.3 (pgtable.c) Sbepe ║return false; ~ │ │ 00015190: 381ff3a8 sturb w8, [x29, #-1] ~ │ ┌┼───00015194: 14000013 b 151e0 <kvm_pte_table+0x94> │ ││ │ ││ kvm_pte_table:128.9 (pgtable.c) Sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ │ │└>┌─00015198: 14000001 b 1519c <kvm_pte_table+0x50> <- 00015184(b.cc)<kvm_pte_table+0x4c> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ │ │┌─└>0001519c: 14000001 b 151a0 <kvm_pte_table+0x54> <- 00015198(b)<kvm_pte_table+0x50> │ ││ │ ││ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ │┌┼└──>000151a0: 14000001 b 151a4 <kvm_pte_table+0x58> <- 0001519c(b)<kvm_pte_table+0x54> │││ │││ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌┼└┼───>000151a4: 14000001 b 151a8 <kvm_pte_table+0x5c> <- 000151a0(b)<kvm_pte_table+0x58> ││ │ ││ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└┼─┼───>000151a8: 14000001 b 151ac <kvm_pte_table+0x60> <- 000151a4(b)<kvm_pte_table+0x5c> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└──┼─┼───>000151ac: 14000001 b 151b0 <kvm_pte_table+0x64> <- 000151a8(b)<kvm_pte_table+0x60> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└────┼─┼───>000151b0: 14000001 b 151b4 <kvm_pte_table+0x68> <- 000151ac(b)<kvm_pte_table+0x64> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└──────┼─┼───>000151b4: 14000001 b 151b8 <kvm_pte_table+0x6c> <- 000151b0(b)<kvm_pte_table+0x68> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└────────┼─┼───>000151b8: 14000001 b 151bc <kvm_pte_table+0x70> <- 000151b4(b)<kvm_pte_table+0x6c> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ ┌─└──────────┼─┼───>000151bc: 14000001 b 151c0 <kvm_pte_table+0x74> <- 000151b8(b)<kvm_pte_table+0x70> │ │ │ │ │ │ kvm_pte_table:128.9 (pgtable.c) sbepe return ║FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ └────────────┼─┼───>000151c0: f9400be8 ldr x8, [sp, #16] <- 000151bc(b)<kvm_pte_table+0x74> ~ │ │ 000151c4: d3410508 ubfx x8, x8, #1, #1 ~ │ │ 000151c8: f90003e8 str x8, [sp] ~ │ │ 000151cc: f94003e8 ldr x8, [sp] │ │ kvm_pte_table:128.38 (pgtable.c) sbepe return FIELD_GET(KVM_PTE_TYPE, pte) ║== KVM_PTE_TYPE_TABLE; ~ │ │ 000151d0: f1000508 subs x8, x8, #0x1 ~ │ │ 000151d4: 1a9f17e9 cset w9, eq // eq = none │ │ kvm_pte_table:128.2 (pgtable.c) sbepe ║return FIELD_GET(KVM_PTE_TYPE, pte) == KVM_PTE_TYPE_TABLE; ~ │ │ 000151d8: 381ff3a9 sturb w9, [x29, #-1] ~ │ │ ┌─000151dc: 14000001 b 151e0 <kvm_pte_table+0x94> │ │ │ │ │ │ kvm_pte_table:129.1 (pgtable.c) Sbepe ║} ~ └>└─>└>000151e0: 385ff3a0 ldurb w0, [x29, #-1] <- 00015178(b)<kvm_pte_table+0x94>,00015194(b)<kvm_pte_table+0x94>,000151dc(b)<kvm_pte_table+0x94> ~ 000151e4: a9427bfd ldp x29, x30, [sp, #32] ~ 000151e8: 9100c3ff add sp, sp, #0x30 00015158 CFA:r29+16 r29:c-16 r30:c-8 ~ 000151ec: d65f03c0 ret -pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1514c 0x151f0 (DW_OP_breg31 0x10) kvm_pte_table:arch/arm64/kvm/hyp/nvhe/../pgtable.c:120 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1514c 0x151f0 (DW_OP_breg31 0xc) kvm_pte_table:arch/arm64/kvm/hyp/nvhe/../pgtable.c:120 **000151f0 <kvm_pgtable_visitor_cb>: + kvm_pgtable_visitor_cb params: +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x151f0 0x15250 (DW_OP_fbreg -0x8) +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x151f0 0x15250 (DW_OP_fbreg -0x10) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x151f0 0x15250 (DW_OP_fbreg -0x14) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x151f0 0x15250 (DW_OP_breg31 0x10) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x151f0 0x15250 (DW_OP_breg31 0xc) kvm_pgtable_visitor_cb:196.0 (pgtable.c) Sbepe ║{ +data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x151f0 0x15250 (DW_OP_fbreg -0x8) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:193 +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x151f0 0x15250 (DW_OP_fbreg -0x10) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:193 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x151f0 0x15250 (DW_OP_fbreg -0x14) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:194 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x151f0 0x15250 (DW_OP_breg31 0x10) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:194 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x151f0 0x15250 (DW_OP_breg31 0xc) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:195 +walker var pointer(struct kvm_pgtable_walker<d70f1>/<e7095>) 0x151f0 0x15250 (DW_OP_breg31 0x0) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:197 ~ 000151f0: d10103ff sub sp, sp, #0x40 <- 00015030(bl)<kvm_pgtable_visitor_cb>,00015068(bl)<kvm_pgtable_visitor_cb>,0001512c(bl)<kvm_pgtable_visitor_cb> ~ 000151f4: a9037bfd stp x29, x30, [sp, #48] 000151f0 CFA:r31 r29:u r30:u ~ 000151f8: 9100c3fd add x29, sp, #0x30 ~ 000151fc: f81f83a0 stur x0, [x29, #-8] ~ 00015200: f81f03a1 stur x1, [x29, #-16] ~ 00015204: b81ec3a2 stur w2, [x29, #-20] ~ 00015208: f9000be3 str x3, [sp, #16] ~ 0001520c: b9000fe4 str w4, [sp, #12] kvm_pgtable_visitor_cb:197.38 (pgtable.c) SbePe struct kvm_pgtable_walker *walker = ║data->walker; ~ 00015210: f85f83a8 ldur x8, [x29, #-8] kvm_pgtable_visitor_cb:197.44 (pgtable.c) sbepe struct kvm_pgtable_walker *walker = data->║walker; ~ 00015214: f9400508 ldr x8, [x8, #8] kvm_pgtable_visitor_cb:197.29 (pgtable.c) sbepe struct kvm_pgtable_walker *║walker = data->walker; ~ 00015218: f90003e8 str x8, [sp] kvm_pgtable_visitor_cb:198.9 (pgtable.c) Sbepe return ║walker->cb(addr, data->end, level, ptep, flag, walker->arg); ~ 0001521c: f94003e8 ldr x8, [sp] kvm_pgtable_visitor_cb:198.17 (pgtable.c) sbepe return walker->║cb(addr, data->end, level, ptep, flag, walker->arg); ~ 00015220: f9400109 ldr x9, [x8] kvm_pgtable_visitor_cb:198.20 (pgtable.c) sbepe return walker->cb(║addr, data->end, level, ptep, flag, walker->arg); ~ 00015224: f85f03a0 ldur x0, [x29, #-16] kvm_pgtable_visitor_cb:198.26 (pgtable.c) sbepe return walker->cb(addr, ║data->end, level, ptep, flag, walker->arg); ~ 00015228: f85f83aa ldur x10, [x29, #-8] kvm_pgtable_visitor_cb:198.32 (pgtable.c) sbepe return walker->cb(addr, data->║end, level, ptep, flag, walker->arg); ~ 0001522c: f9400d41 ldr x1, [x10, #24] kvm_pgtable_visitor_cb:198.37 (pgtable.c) sbepe return walker->cb(addr, data->end, ║level, ptep, flag, walker->arg); ~ 00015230: b85ec3a2 ldur w2, [x29, #-20] kvm_pgtable_visitor_cb:198.44 (pgtable.c) sbepe return walker->cb(addr, data->end, level, ║ptep, flag, walker->arg); ~ 00015234: f9400be3 ldr x3, [sp, #16] kvm_pgtable_visitor_cb:198.50 (pgtable.c) sbepe return walker->cb(addr, data->end, level, ptep, ║flag, walker->arg); ~ 00015238: b9400fe4 ldr w4, [sp, #12] kvm_pgtable_visitor_cb:198.64 (pgtable.c) sbepe return walker->cb(addr, data->end, level, ptep, flag, walker->║arg); ~ 0001523c: f9400505 ldr x5, [x8, #8] kvm_pgtable_visitor_cb:198.9 (pgtable.c) sbepe return ║walker->cb(addr, data->end, level, ptep, flag, walker->arg); ~ 00015240: d63f0120 blr x9 kvm_pgtable_visitor_cb:198.2 (pgtable.c) sbepe ║return walker->cb(addr, data->end, level, ptep, flag, walker->arg); ~ 00015244: a9437bfd ldp x29, x30, [sp, #48] ~ 00015248: 910103ff add sp, sp, #0x40 000151fc CFA:r29+16 r29:c-16 r30:c-8 ~ 0001524c: d65f03c0 ret -data param pointer(struct kvm_pgtable_walk_data<d70f1>/<e7105>) 0x151f0 0x15250 (DW_OP_fbreg -0x8) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:193 -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x151f0 0x15250 (DW_OP_fbreg -0x10) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:193 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x151f0 0x15250 (DW_OP_fbreg -0x14) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:194 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x151f0 0x15250 (DW_OP_breg31 0x10) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:194 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x151f0 0x15250 (DW_OP_breg31 0xc) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:195 -walker var pointer(struct kvm_pgtable_walker<d70f1>/<e7095>) 0x151f0 0x15250 (DW_OP_breg31 0x0) kvm_pgtable_visitor_cb:arch/arm64/kvm/hyp/nvhe/../pgtable.c:197 **00015250 <kvm_granule_size>: + kvm_granule_size params: +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15250 0x15280 (DW_OP_fbreg -0x4) kvm_granule_size:63.0 (pgtable.c) Sbepe ║{ +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15250 0x15280 (DW_OP_fbreg -0x4) kvm_granule_size:arch/arm64/kvm/hyp/nvhe/../pgtable.c:62 ~ 00015250: d10083ff sub sp, sp, #0x20 <- 000144e0(bl)<kvm_granule_size>,00014a2c(bl)<kvm_granule_size>,000150b4(bl)<kvm_granule_size>,00015318(bl)<kvm_granule_size>,000154f8(bl)<kvm_granule_size>,00015ac0(bl)<kvm_granule_size> ~ 00015254: a9017bfd stp x29, x30, [sp, #16] 00015250 CFA:r31 r29:u r30:u ~ 00015258: 910043fd add x29, sp, #0x10 ~ 0001525c: b81fc3a0 stur w0, [x29, #-4] kvm_granule_size:64.9 (pgtable.c) SbePe return ║BIT(kvm_granule_shift(level)); ~ 00015260: b85fc3a0 ldur w0, [x29, #-4] ~ 00015264: 97ffff33 bl 14f30 <kvm_granule_shift> ~ 00015268: 52800028 mov w8, #0x1 // #1 <- 00015264(bl-succ)<return> ~ 0001526c: 2a0803e9 mov w9, w8 ~ 00015270: 9ac02120 lsl x0, x9, x0 kvm_granule_size:64.2 (pgtable.c) sbepe ║return BIT(kvm_granule_shift(level)); ~ 00015274: a9417bfd ldp x29, x30, [sp, #16] ~ 00015278: 910083ff add sp, sp, #0x20 0001525c CFA:r29+16 r29:c-16 r30:c-8 ~ 0001527c: d65f03c0 ret -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15250 0x15280 (DW_OP_fbreg -0x4) kvm_granule_size:arch/arm64/kvm/hyp/nvhe/../pgtable.c:62 **00015280 <kvm_pte_follow>: + kvm_pte_follow params: +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15280 0x152bc (DW_OP_fbreg -0x8) +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15280 0x152bc (DW_OP_breg31 0x10) kvm_pte_follow:152.0 (pgtable.c) Sbepe ║{ +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15280 0x152bc (DW_OP_fbreg -0x8) kvm_pte_follow:arch/arm64/kvm/hyp/nvhe/../pgtable.c:151 +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15280 0x152bc (DW_OP_breg31 0x10) kvm_pte_follow:arch/arm64/kvm/hyp/nvhe/../pgtable.c:151 ~ 00015280: d100c3ff sub sp, sp, #0x30 <- 00013e5c(bl)<kvm_pte_follow>,00014440(bl)<kvm_pte_follow>,000144d0(bl)<kvm_pte_follow>,00014a1c(bl)<kvm_pte_follow>,00014d54(bl)<kvm_pte_follow>,000150dc(bl)<kvm_pte_follow>,000159d0(bl)<kvm_pte_follow> ~ 00015284: a9027bfd stp x29, x30, [sp, #32] 00015280 CFA:r31 r29:u r30:u ~ 00015288: 910083fd add x29, sp, #0x20 ~ 0001528c: f81f83a0 stur x0, [x29, #-8] ~ 00015290: f9000be1 str x1, [sp, #16] kvm_pte_follow:153.9 (pgtable.c) SbePe return ║mm_ops->phys_to_virt(kvm_pte_to_phys(pte)); ~ 00015294: f9400be8 ldr x8, [sp, #16] kvm_pte_follow:153.17 (pgtable.c) sbepe return mm_ops->║phys_to_virt(kvm_pte_to_phys(pte)); ~ 00015298: f9401908 ldr x8, [x8, #48] kvm_pte_follow:153.46 (pgtable.c) sbepe return mm_ops->phys_to_virt(kvm_pte_to_phys(║pte)); ~ 0001529c: f85f83a0 ldur x0, [x29, #-8] ~ 000152a0: f90007e8 str x8, [sp, #8] kvm_pte_follow:153.30 (pgtable.c) sbepe return mm_ops->phys_to_virt(║kvm_pte_to_phys(pte)); ~ 000152a4: 9400000c bl 152d4 <kvm_pte_to_phys> ~ 000152a8: f94007e8 ldr x8, [sp, #8] <- 000152a4(bl-succ)<return> kvm_pte_follow:153.9 (pgtable.c) sbepe return ║mm_ops->phys_to_virt(kvm_pte_to_phys(pte)); ~ 000152ac: d63f0100 blr x8 kvm_pte_follow:153.2 (pgtable.c) sbepe ║return mm_ops->phys_to_virt(kvm_pte_to_phys(pte)); ~ 000152b0: a9427bfd ldp x29, x30, [sp, #32] ~ 000152b4: 9100c3ff add sp, sp, #0x30 0001528c CFA:r29+16 r29:c-16 r30:c-8 ~ 000152b8: d65f03c0 ret -pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15280 0x152bc (DW_OP_fbreg -0x8) kvm_pte_follow:arch/arm64/kvm/hyp/nvhe/../pgtable.c:151 -mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15280 0x152bc (DW_OP_breg31 0x10) kvm_pte_follow:arch/arm64/kvm/hyp/nvhe/../pgtable.c:151 **000152bc <kvm_pte_valid>: + kvm_pte_valid params: +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152bc 0x152d4 (DW_OP_fbreg 0x8) kvm_pte_valid:116.0 (pgtable.c) Sbepe ║{ 000152bc CFA:r31 +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152bc 0x152d4 (DW_OP_fbreg 0x8) kvm_pte_valid:arch/arm64/kvm/hyp/nvhe/../pgtable.c:115 ~ 000152bc: d10043ff sub sp, sp, #0x10 <- 0001440c(bl)<kvm_pte_valid>,000149ec(bl)<kvm_pte_valid>,00014d04(bl)<kvm_pte_valid>,00015180(bl)<kvm_pte_valid>,00015460(bl)<kvm_pte_valid>,0001565c(bl)<kvm_pte_valid>,000157fc(bl)<kvm_pte_valid>,000158ec(bl)<kvm_pte_valid>,00015b04(bl)<kvm_pte_valid>,00015e14(bl)<kvm_pte_valid> ~ 000152c0: f90007e0 str x0, [sp, #8] kvm_pte_valid:117.9 (pgtable.c) SbePe return ║pte & KVM_PTE_VALID; ~ 000152c4: b9400be8 ldr w8, [sp, #8] kvm_pte_valid:117.13 (pgtable.c) sbepe return pte ║& KVM_PTE_VALID; ~ 000152c8: 12000100 and w0, w8, #0x1 kvm_pte_valid:117.2 (pgtable.c) sbepe ║return pte & KVM_PTE_VALID; ~ 000152cc: 910043ff add sp, sp, #0x10 000152c0 CFA:r31+16 ~ 000152d0: d65f03c0 ret -pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152bc 0x152d4 (DW_OP_fbreg 0x8) kvm_pte_valid:arch/arm64/kvm/hyp/nvhe/../pgtable.c:115 **000152d4 <kvm_pte_to_phys>: + kvm_pte_to_phys params: +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152d4 0x152f4 (DW_OP_fbreg 0x8) kvm_pte_to_phys:132.0 (pgtable.c) Sbepe ║{ 000152d4 CFA:r31 +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152d4 0x152f4 (DW_OP_fbreg 0x8) kvm_pte_to_phys:arch/arm64/kvm/hyp/nvhe/../pgtable.c:131 +pa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152d4 0x152f4 (DW_OP_fbreg 0x0) kvm_pte_to_phys:arch/arm64/kvm/hyp/nvhe/../pgtable.c:133 ~ 000152d4: d10043ff sub sp, sp, #0x10 <- 000152a4(bl)<kvm_pte_to_phys> ~ 000152d8: f90007e0 str x0, [sp, #8] kvm_pte_to_phys:133.11 (pgtable.c) SbePe u64 pa = ║pte & KVM_PTE_ADDR_MASK; ~ 000152dc: f94007e8 ldr x8, [sp, #8] kvm_pte_to_phys:133.15 (pgtable.c) sbepe u64 pa = pte ║& KVM_PTE_ADDR_MASK; ~ 000152e0: 92748d08 and x8, x8, #0xfffffffff000 kvm_pte_to_phys:133.6 (pgtable.c) sbepe u64 ║pa = pte & KVM_PTE_ADDR_MASK; ~ 000152e4: f90003e8 str x8, [sp] kvm_pte_to_phys:138.9 (pgtable.c) Sbepe return ║pa; ~ 000152e8: f94003e0 ldr x0, [sp] kvm_pte_to_phys:138.2 (pgtable.c) sbepe ║return pa; ~ 000152ec: 910043ff add sp, sp, #0x10 000152d8 CFA:r31+16 ~ 000152f0: d65f03c0 ret -pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x152d4 0x152f4 (DW_OP_fbreg 0x8) kvm_pte_to_phys:arch/arm64/kvm/hyp/nvhe/../pgtable.c:131 -pa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152d4 0x152f4 (DW_OP_fbreg 0x0) kvm_pte_to_phys:arch/arm64/kvm/hyp/nvhe/../pgtable.c:133 **000152f4 <hyp_map_walker_try_leaf>: + hyp_map_walker_try_leaf params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x152f4 0x153d0 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x152f4 0x153d0 (DW_OP_breg31 0x28) +data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x152f4 0x153d0 (DW_OP_breg31 0x20) hyp_map_walker_try_leaf:345.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x10) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x18) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x152f4 0x153d0 (DW_OP_fbreg -0x1c) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x152f4 0x153d0 (DW_OP_breg31 0x28) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:344 +data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x152f4 0x153d0 (DW_OP_breg31 0x20) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:344 +granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_breg31 0x18) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:346 +phys var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_breg31 0x10) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:346 ~ 000152f4: d10183ff sub sp, sp, #0x60 <- 00013a18(bl)<hyp_map_walker_try_leaf> ~ 000152f8: a9057bfd stp x29, x30, [sp, #80] 000152f4 CFA:r31 r29:u r30:u ~ 000152fc: 910143fd add x29, sp, #0x50 ~ 00015300: f81f03a0 stur x0, [x29, #-16] ~ 00015304: f81e83a1 stur x1, [x29, #-24] ~ 00015308: b81e43a2 stur w2, [x29, #-28] ~ 0001530c: f90017e3 str x3, [sp, #40] ~ 00015310: f90013e4 str x4, [sp, #32] hyp_map_walker_try_leaf:346.33 (pgtable.c) SbePe u64 granule = kvm_granule_size(║level), phys = data->phys; ~ 00015314: b85e43a0 ldur w0, [x29, #-28] hyp_map_walker_try_leaf:346.16 (pgtable.c) sbepe u64 granule = ║kvm_granule_size(level), phys = data->phys; ~ 00015318: 97ffffce bl 15250 <kvm_granule_size> hyp_map_walker_try_leaf:346.6 (pgtable.c) sbepe u64 ║granule = kvm_granule_size(level), phys = data->phys; ~ 0001531c: f9000fe0 str x0, [sp, #24] <- 00015318(bl-succ)<return> hyp_map_walker_try_leaf:346.48 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), phys = ║data->phys; ~ 00015320: f94013e8 ldr x8, [sp, #32] hyp_map_walker_try_leaf:346.54 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), phys = data->║phys; ~ 00015324: f9400108 ldr x8, [x8] hyp_map_walker_try_leaf:346.41 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), ║phys = data->phys; ~ 00015328: f9000be8 str x8, [sp, #16] hyp_map_walker_try_leaf:348.35 (pgtable.c) Sbepe if (!kvm_block_mapping_supported(║addr, end, phys, level)) ~ 0001532c: f85f03a0 ldur x0, [x29, #-16] hyp_map_walker_try_leaf:348.41 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, ║end, phys, level)) ~ 00015330: f85e83a1 ldur x1, [x29, #-24] hyp_map_walker_try_leaf:348.46 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, ║phys, level)) ~ 00015334: f9400be2 ldr x2, [sp, #16] hyp_map_walker_try_leaf:348.52 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, phys, ║level)) ~ 00015338: b85e43a3 ldur w3, [x29, #-28] hyp_map_walker_try_leaf:348.7 (pgtable.c) sbepe if (!║kvm_block_mapping_supported(addr, end, phys, level)) ~ 0001533c: 94000067 bl 154d8 <kvm_block_mapping_supported> hyp_map_walker_try_leaf:348.6 (pgtable.c) sbepe if (║!kvm_block_mapping_supported(addr, end, phys, level)) ~ ┌──00015340: 370000a0 tbnz w0, #0, 15354 <hyp_map_walker_try_leaf+0x60> <- 0001533c(bl-succ)<return> ~ │┌─00015344: 14000001 b 15348 <hyp_map_walker_try_leaf+0x54> <- 00015340(b.cc-succ)<fallthrough> ││ ~ │└>00015348: 2a1f03e8 mov w8, wzr <- 00015344(b)<hyp_map_walker_try_leaf+0x54> hyp_map_walker_try_leaf:349.3 (pgtable.c) Sbepe ║return false; ~ 0001534c: 381ff3a8 sturb w8, [x29, #-1] ~ ┌─┼──00015350: 1400001c b 153c0 <hyp_map_walker_try_leaf+0xcc> │ │ │ │ hyp_map_walker_try_leaf:351.2 (pgtable.c) Sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x15354 0x153a0 (DW_OP_breg31 0xc) lexblock:hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:351 ~ │ └─>00015354: f94017e0 ldr x0, [sp, #40] <- 00015340(b.cc)<hyp_map_walker_try_leaf+0x60> ~ 00015358: f9400be1 ldr x1, [sp, #16] ~ 0001535c: f94013e8 ldr x8, [sp, #32] ~ 00015360: f9400502 ldr x2, [x8, #8] ~ 00015364: b85e43a3 ldur w3, [x29, #-28] ~ 00015368: 9400008d bl 1559c <kvm_set_valid_leaf_pte> ~ 0001536c: 2a2003e9 mvn w9, w0 <- 00015368(bl-succ)<return> ~ 00015370: 12000129 and w9, w9, #0x1 ~ 00015374: b9000fe9 str w9, [sp, #12] hyp_map_walker_try_leaf:351.2 (pgtable.c) sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); ~ 00015378: b9400fe9 ldr w9, [sp, #12] hyp_map_walker_try_leaf:351.2 (pgtable.c) sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); ~ │┌───0001537c: 34000089 cbz w9, 1538c <hyp_map_walker_try_leaf+0x98> ││ ~ ││ ┌─00015380: 14000001 b 15384 <hyp_map_walker_try_leaf+0x90> <- 0001537c(b.cc-succ)<fallthrough> ││ │ ││ │ hyp_map_walker_try_leaf:351.2 (pgtable.c) sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); ~ ││ └>00015384: d4210000 brk #0x800 <- 00015380(b)<hyp_map_walker_try_leaf+0x90> ~ ││ ┌─00015388: 14000001 b 1538c <hyp_map_walker_try_leaf+0x98> ││ │ ││ │ hyp_map_walker_try_leaf:351.2 (pgtable.c) sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); ~ │└>└>0001538c: b9400fe8 ldr w8, [sp, #12] <- 0001537c(b.cc)<hyp_map_walker_try_leaf+0x98>,00015388(b)<hyp_map_walker_try_leaf+0x98> ~ 00015390: 71000108 subs w8, w8, #0x0 ~ 00015394: 1a9f07e9 cset w9, ne // ne = any ~ 00015398: 2a0903ea mov w10, w9 hyp_map_walker_try_leaf:351.2 (pgtable.c) sbepe ║WARN_ON(!kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)); ~ 0001539c: f90003ea str x10, [sp] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x15354 0x153a0 (DW_OP_breg31 0xc) lexblock:hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:351 hyp_map_walker_try_leaf:352.16 (pgtable.c) Sbepe data->phys += ║granule; ~ 000153a0: f9400fea ldr x10, [sp, #24] hyp_map_walker_try_leaf:352.2 (pgtable.c) sbepe ║data->phys += granule; ~ 000153a4: f94013eb ldr x11, [sp, #32] hyp_map_walker_try_leaf:352.13 (pgtable.c) sbepe data->phys ║+= granule; ~ 000153a8: f940016c ldr x12, [x11] ~ 000153ac: 8b0a018a add x10, x12, x10 ~ 000153b0: f900016a str x10, [x11] ~ 000153b4: 52800029 mov w9, #0x1 // #1 hyp_map_walker_try_leaf:353.2 (pgtable.c) Sbepe ║return true; ~ 000153b8: 381ff3a9 sturb w9, [x29, #-1] ~ │ ┌─000153bc: 14000001 b 153c0 <hyp_map_walker_try_leaf+0xcc> │ │ │ │ hyp_map_walker_try_leaf:354.1 (pgtable.c) Sbepe ║} ~ └─>└>000153c0: 385ff3a0 ldurb w0, [x29, #-1] <- 00015350(b)<hyp_map_walker_try_leaf+0xcc>,000153bc(b)<hyp_map_walker_try_leaf+0xcc> ~ 000153c4: a9457bfd ldp x29, x30, [sp, #80] ~ 000153c8: 910183ff add sp, sp, #0x60 00015300 CFA:r29+16 r29:c-16 r30:c-8 ~ 000153cc: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x10) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_fbreg -0x18) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x152f4 0x153d0 (DW_OP_fbreg -0x1c) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:343 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x152f4 0x153d0 (DW_OP_breg31 0x28) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:344 -data param pointer(struct hyp_map_data<d70f1>/<e7143>) 0x152f4 0x153d0 (DW_OP_breg31 0x20) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:344 -granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_breg31 0x18) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:346 -phys var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x152f4 0x153d0 (DW_OP_breg31 0x10) hyp_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:346 **000153d0 <kvm_set_table_pte>: + kvm_set_table_pte params: +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x8) +childp param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x10) +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x153d0 0x154d8 (DW_OP_fbreg -0x18) kvm_set_table_pte:164.0 (pgtable.c) Sbepe ║{ +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x8) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:162 +childp param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x10) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:162 +mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x153d0 0x154d8 (DW_OP_fbreg -0x18) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:163 +old var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x153d0 0x154d8 (DW_OP_fbreg -0x20) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:165 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x153d0 0x154d8 (DW_OP_breg31 0x28) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:165 ~ 000153d0: d10183ff sub sp, sp, #0x60 <- 00013ab8(bl)<kvm_set_table_pte>,00015934(bl)<kvm_set_table_pte> ~ 000153d4: a9057bfd stp x29, x30, [sp, #80] 000153d0 CFA:r31 r29:u r30:u ~ 000153d8: 910143fd add x29, sp, #0x50 ~ 000153dc: f81f83a0 stur x0, [x29, #-8] ~ 000153e0: f81f03a1 stur x1, [x29, #-16] ~ 000153e4: f81e83a2 stur x2, [x29, #-24] kvm_set_table_pte:165.19 (pgtable.c) SbePe kvm_pte_t old = *║ptep, pte = kvm_phys_to_pte(mm_ops->virt_to_phys(childp)); ~ 000153e8: f85f83a8 ldur x8, [x29, #-8] kvm_set_table_pte:165.18 (pgtable.c) sbepe kvm_pte_t old = ║*ptep, pte = kvm_phys_to_pte(mm_ops->virt_to_phys(childp)); ~ 000153ec: f9400108 ldr x8, [x8] kvm_set_table_pte:165.12 (pgtable.c) sbepe kvm_pte_t ║old = *ptep, pte = kvm_phys_to_pte(mm_ops->virt_to_phys(childp)); ~ 000153f0: f81e03a8 stur x8, [x29, #-32] kvm_set_table_pte:165.47 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(║mm_ops->virt_to_phys(childp)); ~ 000153f4: f85e83a8 ldur x8, [x29, #-24] kvm_set_table_pte:165.55 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(mm_ops->║virt_to_phys(childp)); ~ 000153f8: f9401d08 ldr x8, [x8, #56] kvm_set_table_pte:165.68 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(mm_ops->virt_to_phys(║childp)); ~ 000153fc: f85f03a0 ldur x0, [x29, #-16] kvm_set_table_pte:165.47 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(║mm_ops->virt_to_phys(childp)); ~ 00015400: d63f0100 blr x8 kvm_set_table_pte:165.31 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = ║kvm_phys_to_pte(mm_ops->virt_to_phys(childp)); ~ 00015404: 940000b4 bl 156d4 <kvm_phys_to_pte> kvm_set_table_pte:165.25 (pgtable.c) sbepe kvm_pte_t old = *ptep, ║pte = kvm_phys_to_pte(mm_ops->virt_to_phys(childp)); ~ 00015408: f90017e0 str x0, [sp, #40] <- 00015404(bl-succ)<return> kvm_set_table_pte:167.9 (pgtable.c) Sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─0001540c: 14000001 b 15410 <kvm_set_table_pte+0x40> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└>00015410: 14000001 b 15414 <kvm_set_table_pte+0x44> <- 0001540c(b)<kvm_set_table_pte+0x40> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└──>00015414: 14000001 b 15418 <kvm_set_table_pte+0x48> <- 00015410(b)<kvm_set_table_pte+0x44> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└────>00015418: 14000001 b 1541c <kvm_set_table_pte+0x4c> <- 00015414(b)<kvm_set_table_pte+0x48> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└──────>0001541c: 14000001 b 15420 <kvm_set_table_pte+0x50> <- 00015418(b)<kvm_set_table_pte+0x4c> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└────────>00015420: 14000001 b 15424 <kvm_set_table_pte+0x54> <- 0001541c(b)<kvm_set_table_pte+0x50> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└──────────>00015424: 14000001 b 15428 <kvm_set_table_pte+0x58> <- 00015420(b)<kvm_set_table_pte+0x54> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└────────────>00015428: 14000001 b 1542c <kvm_set_table_pte+0x5c> <- 00015424(b)<kvm_set_table_pte+0x58> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└──────────────>0001542c: 14000001 b 15430 <kvm_set_table_pte+0x60> <- 00015428(b)<kvm_set_table_pte+0x5c> kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ ┌─└────────────────>00015430: 14000001 b 15434 <kvm_set_table_pte+0x64> <- 0001542c(b)<kvm_set_table_pte+0x60> ~ └──────────────────>00015434: 52800048 mov w8, #0x2 // #2 <- 00015430(b)<kvm_set_table_pte+0x64> ~ 00015438: 2a0803e9 mov w9, w8 kvm_set_table_pte:167.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ 0001543c: f90013e9 str x9, [sp, #32] ~ 00015440: f94013e9 ldr x9, [sp, #32] kvm_set_table_pte:167.6 (pgtable.c) sbepe pte ║|= FIELD_PREP(KVM_PTE_TYPE, KVM_PTE_TYPE_TABLE); ~ 00015444: f94017ea ldr x10, [sp, #40] ~ 00015448: aa090149 orr x9, x10, x9 ~ 0001544c: f90017e9 str x9, [sp, #40] kvm_set_table_pte:168.6 (pgtable.c) Sbepe pte ║|= KVM_PTE_VALID; ~ 00015450: f94017e9 ldr x9, [sp, #40] ~ 00015454: b2400129 orr x9, x9, #0x1 ~ 00015458: f90017e9 str x9, [sp, #40] kvm_set_table_pte:170.2 (pgtable.c) Sbepe ║WARN_ON(kvm_pte_valid(old)); +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x1545c 0x15494 (DW_OP_breg31 0x1c) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:170 ~ 0001545c: f85e03a0 ldur x0, [x29, #-32] ~ 00015460: 97ffff97 bl 152bc <kvm_pte_valid> ~ 00015464: 12000008 and w8, w0, #0x1 <- 00015460(bl-succ)<return> ~ 00015468: b9001fe8 str w8, [sp, #28] kvm_set_table_pte:170.2 (pgtable.c) sbepe ║WARN_ON(kvm_pte_valid(old)); ~ 0001546c: b9401fe8 ldr w8, [sp, #28] kvm_set_table_pte:170.2 (pgtable.c) sbepe ║WARN_ON(kvm_pte_valid(old)); ~ ┌───00015470: 34000088 cbz w8, 15480 <kvm_set_table_pte+0xb0> ~ │ ┌─00015474: 14000001 b 15478 <kvm_set_table_pte+0xa8> <- 00015470(b.cc-succ)<fallthrough> │ │ │ │ kvm_set_table_pte:170.2 (pgtable.c) sbepe ║WARN_ON(kvm_pte_valid(old)); ~ │ └>00015478: d4210000 brk #0x800 <- 00015474(b)<kvm_set_table_pte+0xa8> ~ │ ┌─0001547c: 14000001 b 15480 <kvm_set_table_pte+0xb0> │ │ │ │ kvm_set_table_pte:170.2 (pgtable.c) sbepe ║WARN_ON(kvm_pte_valid(old)); ~ └>└>00015480: b9401fe8 ldr w8, [sp, #28] <- 00015470(b.cc)<kvm_set_table_pte+0xb0>,0001547c(b)<kvm_set_table_pte+0xb0> ~ 00015484: 71000108 subs w8, w8, #0x0 ~ 00015488: 1a9f07e9 cset w9, ne // ne = any ~ 0001548c: 2a0903ea mov w10, w9 kvm_set_table_pte:170.2 (pgtable.c) sbepe ║WARN_ON(kvm_pte_valid(old)); ~ 00015490: f9000bea str x10, [sp, #16] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x1545c 0x15494 (DW_OP_breg31 0x1c) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:170 kvm_set_table_pte:171.2 (pgtable.c) Sbepe ║smp_store_release(ptep, pte); ~ ┌─00015494: 14000001 b 15498 <kvm_set_table_pte+0xc8> kvm_set_table_pte:171.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); +__p var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15498 0x154cc (DW_OP_breg31 0x8) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:171 +__u var union noname<d70f1>/<d87b9> 0x15498 0x154cc (DW_OP_breg31 0x0) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:171 ~ └>00015498: f85f83a8 ldur x8, [x29, #-8] <- 00015494(b)<kvm_set_table_pte+0xc8> ~ 0001549c: f90007e8 str x8, [sp, #8] ~ 000154a0: f94017e8 ldr x8, [sp, #40] ~ 000154a4: f90003e8 str x8, [sp] ~ ┌─000154a8: 14000001 b 154ac <kvm_set_table_pte+0xdc> kvm_set_table_pte:171.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); ~ ┌─└>000154ac: 14000001 b 154b0 <kvm_set_table_pte+0xe0> <- 000154a8(b)<kvm_set_table_pte+0xdc> kvm_set_table_pte:171.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); ~ └──>000154b0: f94007e0 ldr x0, [sp, #8] <- 000154ac(b)<kvm_set_table_pte+0xe0> ~ 000154b4: 52800101 mov w1, #0x8 // #8 ~ 000154b8: 9400008f bl 156f4 <kasan_check_write> ~ 000154bc: f94007e8 ldr x8, [sp, #8] <- 000154b8(bl-succ)<return> ~ 000154c0: f94003e9 ldr x9, [sp] ~ 000154c4: c89ffd09 stlr x9, [x8] ~ ┌─000154c8: 14000001 b 154cc <kvm_set_table_pte+0xfc> -__p var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15498 0x154cc (DW_OP_breg31 0x8) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:171 -__u var union noname<d70f1>/<d87b9> 0x15498 0x154cc (DW_OP_breg31 0x0) lexblock:kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:171 kvm_set_table_pte:172.1 (pgtable.c) Sbepe ║} ~ └>000154cc: a9457bfd ldp x29, x30, [sp, #80] <- 000154c8(b)<kvm_set_table_pte+0xfc> ~ 000154d0: 910183ff add sp, sp, #0x60 000153dc CFA:r29+16 r29:c-16 r30:c-8 ~ 000154d4: d65f03c0 ret -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x8) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:162 -childp param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x153d0 0x154d8 (DW_OP_fbreg -0x10) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:162 -mm_ops param pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x153d0 0x154d8 (DW_OP_fbreg -0x18) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:163 -old var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x153d0 0x154d8 (DW_OP_fbreg -0x20) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:165 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x153d0 0x154d8 (DW_OP_breg31 0x28) kvm_set_table_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:165 **000154d8 <kvm_block_mapping_supported>: + kvm_block_mapping_supported params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x18) +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_breg31 0x20) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x154d8 0x1559c (DW_OP_breg31 0x1c) kvm_block_mapping_supported:68.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x10) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x18) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 +phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_breg31 0x20) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x154d8 0x1559c (DW_OP_breg31 0x1c) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 +granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_breg31 0x10) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:69 ~ 000154d8: d10143ff sub sp, sp, #0x50 <- 0001533c(bl)<kvm_block_mapping_supported>,0001575c(bl)<kvm_block_mapping_supported>,00015ae4(bl)<kvm_block_mapping_supported> ~ 000154dc: a9047bfd stp x29, x30, [sp, #64] 000154d8 CFA:r31 r29:u r30:u ~ 000154e0: 910103fd add x29, sp, #0x40 ~ 000154e4: f81f03a0 stur x0, [x29, #-16] ~ 000154e8: f81e83a1 stur x1, [x29, #-24] ~ 000154ec: f90013e2 str x2, [sp, #32] ~ 000154f0: b9001fe3 str w3, [sp, #28] kvm_block_mapping_supported:69.33 (pgtable.c) SbePe u64 granule = kvm_granule_size(║level); ~ 000154f4: b9401fe0 ldr w0, [sp, #28] kvm_block_mapping_supported:69.16 (pgtable.c) sbepe u64 granule = ║kvm_granule_size(level); ~ 000154f8: 97ffff56 bl 15250 <kvm_granule_size> kvm_block_mapping_supported:69.6 (pgtable.c) sbepe u64 ║granule = kvm_granule_size(level); ~ 000154fc: f9000be0 str x0, [sp, #16] <- 000154f8(bl-succ)<return> kvm_block_mapping_supported:75.6 (pgtable.c) Sbepe if (║level == 0 || (PAGE_SIZE != SZ_4K && level == 1)) ~ 00015500: b9401fe8 ldr w8, [sp, #28] kvm_block_mapping_supported:75.6 (pgtable.c) sbepe if (║level == 0 || (PAGE_SIZE != SZ_4K && level == 1)) ~ ┌──00015504: 350000a8 cbnz w8, 15518 <kvm_block_mapping_supported+0x40> ~ │┌─00015508: 14000001 b 1550c <kvm_block_mapping_supported+0x34> <- 00015504(b.cc-succ)<fallthrough> ││ ~ │└>0001550c: 2a1f03e8 mov w8, wzr <- 00015508(b)<kvm_block_mapping_supported+0x34> kvm_block_mapping_supported:76.3 (pgtable.c) Sbepe ║return false; ~ 00015510: 381ff3a8 sturb w8, [x29, #-1] ~ ┌───┼──00015514: 1400001e b 1558c <kvm_block_mapping_supported+0xb4> │ │ │ │ kvm_block_mapping_supported:78.6 (pgtable.c) Sbepe if (║granule > (end - addr)) ~ │ └─>00015518: f9400be8 ldr x8, [sp, #16] <- 00015504(b.cc)<kvm_block_mapping_supported+0x40> kvm_block_mapping_supported:78.17 (pgtable.c) sbepe if (granule > (║end - addr)) ~ 0001551c: f85e83a9 ldur x9, [x29, #-24] kvm_block_mapping_supported:78.23 (pgtable.c) sbepe if (granule > (end - ║addr)) ~ 00015520: f85f03aa ldur x10, [x29, #-16] kvm_block_mapping_supported:78.21 (pgtable.c) sbepe if (granule > (end ║- addr)) ~ 00015524: eb0a0129 subs x9, x9, x10 kvm_block_mapping_supported:78.6 (pgtable.c) sbepe if (║granule > (end - addr)) ~ 00015528: eb090108 subs x8, x8, x9 ~ │ ┌──0001552c: 540000a9 b.ls 15540 <kvm_block_mapping_supported+0x68> // b.plast │ │ ~ │ │┌─00015530: 14000001 b 15534 <kvm_block_mapping_supported+0x5c> <- 0001552c(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00015534: 2a1f03e8 mov w8, wzr <- 00015530(b)<kvm_block_mapping_supported+0x5c> │ │ kvm_block_mapping_supported:79.3 (pgtable.c) Sbepe ║return false; ~ │ │ 00015538: 381ff3a8 sturb w8, [x29, #-1] ~ │ ┌─┼──0001553c: 14000014 b 1558c <kvm_block_mapping_supported+0xb4> │ │ │ │ │ │ kvm_block_mapping_supported:81.9 (pgtable.c) Sbepe return ║IS_ALIGNED(addr, granule) && IS_ALIGNED(phys, granule); ~ │ │ └─>00015540: f85f03a8 ldur x8, [x29, #-16] <- 0001552c(b.cc)<kvm_block_mapping_supported+0x68> ~ │ │ 00015544: f9400be9 ldr x9, [sp, #16] ~ │ │ 00015548: f1000529 subs x9, x9, #0x1 ~ │ │ 0001554c: 8a090108 and x8, x8, x9 ~ │ │ 00015550: 2a1f03e0 mov w0, wzr ~ │ │ 00015554: b9000fe0 str w0, [sp, #12] │ │ kvm_block_mapping_supported:81.35 (pgtable.c) sbepe return IS_ALIGNED(addr, granule) ║&& IS_ALIGNED(phys, granule); ~ │ │┌───00015558: b5000128 cbnz x8, 1557c <kvm_block_mapping_supported+0xa4> │ ││ ~ │ ││ ┌─0001555c: 14000001 b 15560 <kvm_block_mapping_supported+0x88> <- 00015558(b.cc-succ)<fallthrough> │ ││ │ │ ││ │ kvm_block_mapping_supported:81.38 (pgtable.c) sbepe return IS_ALIGNED(addr, granule) && ║IS_ALIGNED(phys, granule); ~ │ ││ └>00015560: f94013e8 ldr x8, [sp, #32] <- 0001555c(b)<kvm_block_mapping_supported+0x88> ~ │ ││ 00015564: f9400be9 ldr x9, [sp, #16] ~ │ ││ 00015568: f1000529 subs x9, x9, #0x1 ~ │ ││ 0001556c: ea090108 ands x8, x8, x9 ~ │ ││ 00015570: 1a9f17ea cset w10, eq // eq = none ~ │ ││ 00015574: b9000fea str w10, [sp, #12] ~ │ ││ ┌─00015578: 14000001 b 1557c <kvm_block_mapping_supported+0xa4> │ ││ │ ~ │ │└>└>0001557c: b9400fe8 ldr w8, [sp, #12] <- 00015558(b.cc)<kvm_block_mapping_supported+0xa4>,00015578(b)<kvm_block_mapping_supported+0xa4> │ │ kvm_block_mapping_supported:81.2 (pgtable.c) sbepe ║return IS_ALIGNED(addr, granule) && IS_ALIGNED(phys, granule); ~ │ │ 00015580: 12000108 and w8, w8, #0x1 ~ │ │ 00015584: 381ff3a8 sturb w8, [x29, #-1] ~ │ │ ┌─00015588: 14000001 b 1558c <kvm_block_mapping_supported+0xb4> │ │ │ │ │ │ kvm_block_mapping_supported:82.1 (pgtable.c) Sbepe ║} ~ └>└─>└>0001558c: 385ff3a0 ldurb w0, [x29, #-1] <- 00015514(b)<kvm_block_mapping_supported+0xb4>,0001553c(b)<kvm_block_mapping_supported+0xb4>,00015588(b)<kvm_block_mapping_supported+0xb4> ~ 00015590: a9447bfd ldp x29, x30, [sp, #64] ~ 00015594: 910143ff add sp, sp, #0x50 000154e4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015598: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x10) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_fbreg -0x18) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 -phys param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_breg31 0x20) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x154d8 0x1559c (DW_OP_breg31 0x1c) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:67 -granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x154d8 0x1559c (DW_OP_breg31 0x10) kvm_block_mapping_supported:arch/arm64/kvm/hyp/nvhe/../pgtable.c:69 **0001559c <kvm_set_valid_leaf_pte>: + kvm_set_valid_leaf_pte params: +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1559c 0x156d4 (DW_OP_fbreg -0x10) +pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1559c 0x156d4 (DW_OP_fbreg -0x18) +attr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_fbreg -0x20) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1559c 0x156d4 (DW_OP_fbreg -0x24) kvm_set_valid_leaf_pte:176.0 (pgtable.c) Sbepe ║{ +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1559c 0x156d4 (DW_OP_fbreg -0x10) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 +pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1559c 0x156d4 (DW_OP_fbreg -0x18) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 +attr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_fbreg -0x20) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1559c 0x156d4 (DW_OP_fbreg -0x24) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:175 +old var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_breg31 0x30) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:177 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_breg31 0x28) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:177 +type var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1559c 0x156d4 (DW_OP_breg31 0x20) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:178 ~ 0001559c: d101c3ff sub sp, sp, #0x70 <- 00015368(bl)<kvm_set_valid_leaf_pte>,00015b38(bl)<kvm_set_valid_leaf_pte>,00015b78(bl)<kvm_set_valid_leaf_pte> ~ 000155a0: a9067bfd stp x29, x30, [sp, #96] 0001559c CFA:r31 r29:u r30:u ~ 000155a4: 910183fd add x29, sp, #0x60 ~ 000155a8: f81f03a0 stur x0, [x29, #-16] ~ 000155ac: f81e83a1 stur x1, [x29, #-24] ~ 000155b0: f81e03a2 stur x2, [x29, #-32] ~ 000155b4: b81dc3a3 stur w3, [x29, #-36] kvm_set_valid_leaf_pte:177.19 (pgtable.c) SbePe kvm_pte_t old = *║ptep, pte = kvm_phys_to_pte(pa); ~ 000155b8: f85f03a8 ldur x8, [x29, #-16] kvm_set_valid_leaf_pte:177.18 (pgtable.c) sbepe kvm_pte_t old = ║*ptep, pte = kvm_phys_to_pte(pa); ~ 000155bc: f9400108 ldr x8, [x8] kvm_set_valid_leaf_pte:177.12 (pgtable.c) sbepe kvm_pte_t ║old = *ptep, pte = kvm_phys_to_pte(pa); ~ 000155c0: f9001be8 str x8, [sp, #48] kvm_set_valid_leaf_pte:177.47 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = kvm_phys_to_pte(║pa); ~ 000155c4: f85e83a0 ldur x0, [x29, #-24] kvm_set_valid_leaf_pte:177.31 (pgtable.c) sbepe kvm_pte_t old = *ptep, pte = ║kvm_phys_to_pte(pa); ~ 000155c8: 94000043 bl 156d4 <kvm_phys_to_pte> kvm_set_valid_leaf_pte:177.25 (pgtable.c) sbepe kvm_pte_t old = *ptep, ║pte = kvm_phys_to_pte(pa); ~ 000155cc: f90017e0 str x0, [sp, #40] <- 000155c8(bl-succ)<return> kvm_set_valid_leaf_pte:178.14 (pgtable.c) Sbepe u64 type = (║level == KVM_PGTABLE_MAX_LEVELS - 1) ? KVM_PTE_TYPE_PAGE : ~ 000155d0: b85dc3a9 ldur w9, [x29, #-36] kvm_set_valid_leaf_pte:178.20 (pgtable.c) sbepe u64 type = (level ║== KVM_PGTABLE_MAX_LEVELS - 1) ? KVM_PTE_TYPE_PAGE : ~ 000155d4: 71000d29 subs w9, w9, #0x3 ~ 000155d8: 1a9f17ea cset w10, eq // eq = none kvm_set_valid_leaf_pte:178.13 (pgtable.c) sbepe u64 type = ║(level == KVM_PGTABLE_MAX_LEVELS - 1) ? KVM_PTE_TYPE_PAGE : ~ 000155dc: 2a0a03e8 mov w8, w10 kvm_set_valid_leaf_pte:178.6 (pgtable.c) sbepe u64 ║type = (level == KVM_PGTABLE_MAX_LEVELS - 1) ? KVM_PTE_TYPE_PAGE : ~ 000155e0: f90013e8 str x8, [sp, #32] kvm_set_valid_leaf_pte:181.9 (pgtable.c) Sbepe pte |= ║attr & (KVM_PTE_LEAF_ATTR_LO | KVM_PTE_LEAF_ATTR_HI); ~ 000155e4: f85e03a8 ldur x8, [x29, #-32] ~ 000155e8: d281ff8b mov x11, #0xffc // #4092 ~ 000155ec: f2ffff0b movk x11, #0xfff8, lsl #48 kvm_set_valid_leaf_pte:181.14 (pgtable.c) sbepe pte |= attr ║& (KVM_PTE_LEAF_ATTR_LO | KVM_PTE_LEAF_ATTR_HI); ~ 000155f0: 8a0b0108 and x8, x8, x11 kvm_set_valid_leaf_pte:181.6 (pgtable.c) sbepe pte ║|= attr & (KVM_PTE_LEAF_ATTR_LO | KVM_PTE_LEAF_ATTR_HI); ~ 000155f4: f94017eb ldr x11, [sp, #40] ~ 000155f8: aa080168 orr x8, x11, x8 ~ 000155fc: f90017e8 str x8, [sp, #40] kvm_set_valid_leaf_pte:182.9 (pgtable.c) Sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─00015600: 14000001 b 15604 <kvm_set_valid_leaf_pte+0x68> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└>00015604: 14000001 b 15608 <kvm_set_valid_leaf_pte+0x6c> <- 00015600(b)<kvm_set_valid_leaf_pte+0x68> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└──>00015608: 14000001 b 1560c <kvm_set_valid_leaf_pte+0x70> <- 00015604(b)<kvm_set_valid_leaf_pte+0x6c> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└────>0001560c: 14000001 b 15610 <kvm_set_valid_leaf_pte+0x74> <- 00015608(b)<kvm_set_valid_leaf_pte+0x70> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└──────>00015610: 14000001 b 15614 <kvm_set_valid_leaf_pte+0x78> <- 0001560c(b)<kvm_set_valid_leaf_pte+0x74> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└────────>00015614: 14000001 b 15618 <kvm_set_valid_leaf_pte+0x7c> <- 00015610(b)<kvm_set_valid_leaf_pte+0x78> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└──────────>00015618: 14000001 b 1561c <kvm_set_valid_leaf_pte+0x80> <- 00015614(b)<kvm_set_valid_leaf_pte+0x7c> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└────────────>0001561c: 14000001 b 15620 <kvm_set_valid_leaf_pte+0x84> <- 00015618(b)<kvm_set_valid_leaf_pte+0x80> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└──────────────>00015620: 14000001 b 15624 <kvm_set_valid_leaf_pte+0x88> <- 0001561c(b)<kvm_set_valid_leaf_pte+0x84> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ ┌─└────────────────>00015624: 14000001 b 15628 <kvm_set_valid_leaf_pte+0x8c> <- 00015620(b)<kvm_set_valid_leaf_pte+0x88> kvm_set_valid_leaf_pte:182.9 (pgtable.c) sbepe pte |= ║FIELD_PREP(KVM_PTE_TYPE, type); ~ └──────────────────>00015628: b94023e8 ldr w8, [sp, #32] <- 00015624(b)<kvm_set_valid_leaf_pte+0x8c> ~ 0001562c: 531f7908 lsl w8, w8, #1 ~ 00015630: 2a0803e0 mov w0, w8 ~ 00015634: 927f0009 and x9, x0, #0x2 ~ 00015638: f9000fe9 str x9, [sp, #24] ~ 0001563c: f9400fe9 ldr x9, [sp, #24] kvm_set_valid_leaf_pte:182.6 (pgtable.c) sbepe pte ║|= FIELD_PREP(KVM_PTE_TYPE, type); ~ 00015640: f94017ea ldr x10, [sp, #40] ~ 00015644: aa090149 orr x9, x10, x9 ~ 00015648: f90017e9 str x9, [sp, #40] kvm_set_valid_leaf_pte:183.6 (pgtable.c) Sbepe pte ║|= KVM_PTE_VALID; ~ 0001564c: f94017e9 ldr x9, [sp, #40] ~ 00015650: b2400129 orr x9, x9, #0x1 ~ 00015654: f90017e9 str x9, [sp, #40] kvm_set_valid_leaf_pte:186.20 (pgtable.c) Sbepe if (kvm_pte_valid(║old)) ~ 00015658: f9401be0 ldr x0, [sp, #48] kvm_set_valid_leaf_pte:186.6 (pgtable.c) sbepe if (║kvm_pte_valid(old)) ~ 0001565c: 97ffff18 bl 152bc <kvm_pte_valid> kvm_set_valid_leaf_pte:186.6 (pgtable.c) sbepe if (║kvm_pte_valid(old)) ~ ┌───00015660: 36000100 tbz w0, #0, 15680 <kvm_set_valid_leaf_pte+0xe4> <- 0001565c(bl-succ)<return> ~ │ ┌─00015664: 14000001 b 15668 <kvm_set_valid_leaf_pte+0xcc> <- 00015660(b.cc-succ)<fallthrough> │ │ │ │ kvm_set_valid_leaf_pte:187.10 (pgtable.c) Sbepe return ║old == pte; ~ │ └>00015668: f9401be8 ldr x8, [sp, #48] <- 00015664(b)<kvm_set_valid_leaf_pte+0xcc> kvm_set_valid_leaf_pte:187.17 (pgtable.c) sbepe return old == ║pte; ~ 0001566c: f94017e9 ldr x9, [sp, #40] kvm_set_valid_leaf_pte:187.14 (pgtable.c) sbepe return old ║== pte; ~ 00015670: eb090108 subs x8, x8, x9 ~ 00015674: 1a9f17ea cset w10, eq // eq = none kvm_set_valid_leaf_pte:187.3 (pgtable.c) sbepe ║return old == pte; ~ 00015678: 381ff3aa sturb w10, [x29, #-1] ~ ┌┼───0001567c: 14000012 b 156c4 <kvm_set_valid_leaf_pte+0x128> ││ ││ kvm_set_valid_leaf_pte:189.2 (pgtable.c) Sbepe ║smp_store_release(ptep, pte); ~ │└>┌─00015680: 14000001 b 15684 <kvm_set_valid_leaf_pte+0xe8> <- 00015660(b.cc)<kvm_set_valid_leaf_pte+0xe4> │ │ │ │ kvm_set_valid_leaf_pte:189.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); +__p var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15684 0x156b8 (DW_OP_breg31 0x10) lexblock:kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:189 +__u var union noname<d70f1>/<d88dc> 0x15684 0x156b8 (DW_OP_breg31 0x8) lexblock:kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:189 ~ │ └>00015684: f85f03a8 ldur x8, [x29, #-16] <- 00015680(b)<kvm_set_valid_leaf_pte+0xe8> ~ 00015688: f9000be8 str x8, [sp, #16] ~ 0001568c: f94017e8 ldr x8, [sp, #40] ~ 00015690: f90007e8 str x8, [sp, #8] ~ │ ┌─00015694: 14000001 b 15698 <kvm_set_valid_leaf_pte+0xfc> │ │ │ │ kvm_set_valid_leaf_pte:189.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); ~ │┌─└>00015698: 14000001 b 1569c <kvm_set_valid_leaf_pte+0x100> <- 00015694(b)<kvm_set_valid_leaf_pte+0xfc> ││ ││ kvm_set_valid_leaf_pte:189.2 (pgtable.c) sbepe ║smp_store_release(ptep, pte); ~ │└──>0001569c: f9400be0 ldr x0, [sp, #16] <- 00015698(b)<kvm_set_valid_leaf_pte+0x100> ~ 000156a0: 52800101 mov w1, #0x8 // #8 ~ 000156a4: 94000014 bl 156f4 <kasan_check_write> ~ 000156a8: f9400be8 ldr x8, [sp, #16] <- 000156a4(bl-succ)<return> ~ 000156ac: f94007e9 ldr x9, [sp, #8] ~ 000156b0: c89ffd09 stlr x9, [x8] ~ │ ┌─000156b4: 14000001 b 156b8 <kvm_set_valid_leaf_pte+0x11c> -__p var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15684 0x156b8 (DW_OP_breg31 0x10) lexblock:kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:189 -__u var union noname<d70f1>/<d88dc> 0x15684 0x156b8 (DW_OP_breg31 0x8) lexblock:kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:189 │ │ ~ │ └>000156b8: 52800028 mov w8, #0x1 // #1 <- 000156b4(b)<kvm_set_valid_leaf_pte+0x11c> kvm_set_valid_leaf_pte:190.2 (pgtable.c) Sbepe ║return true; ~ 000156bc: 381ff3a8 sturb w8, [x29, #-1] ~ │ ┌─000156c0: 14000001 b 156c4 <kvm_set_valid_leaf_pte+0x128> │ │ │ │ kvm_set_valid_leaf_pte:191.1 (pgtable.c) Sbepe ║} ~ └─>└>000156c4: 385ff3a0 ldurb w0, [x29, #-1] <- 0001567c(b)<kvm_set_valid_leaf_pte+0x128>,000156c0(b)<kvm_set_valid_leaf_pte+0x128> ~ 000156c8: a9467bfd ldp x29, x30, [sp, #96] ~ 000156cc: 9101c3ff add sp, sp, #0x70 000155a8 CFA:r29+16 r29:c-16 r30:c-8 ~ 000156d0: d65f03c0 ret -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1559c 0x156d4 (DW_OP_fbreg -0x10) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 -pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1559c 0x156d4 (DW_OP_fbreg -0x18) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 -attr param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_fbreg -0x20) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:174 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1559c 0x156d4 (DW_OP_fbreg -0x24) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:175 -old var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_breg31 0x30) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:177 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x1559c 0x156d4 (DW_OP_breg31 0x28) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:177 -type var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1559c 0x156d4 (DW_OP_breg31 0x20) kvm_set_valid_leaf_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:178 **000156d4 <kvm_phys_to_pte>: + kvm_phys_to_pte params: +pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x156d4 0x156f4 (DW_OP_fbreg 0x8) kvm_phys_to_pte:142.0 (pgtable.c) Sbepe ║{ 000156d4 CFA:r31 +pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x156d4 0x156f4 (DW_OP_fbreg 0x8) kvm_phys_to_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:141 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x156d4 0x156f4 (DW_OP_fbreg 0x0) kvm_phys_to_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:143 ~ 000156d4: d10043ff sub sp, sp, #0x10 <- 00015404(bl)<kvm_phys_to_pte>,000155c8(bl)<kvm_phys_to_pte> ~ 000156d8: f90007e0 str x0, [sp, #8] kvm_phys_to_pte:143.18 (pgtable.c) SbePe kvm_pte_t pte = ║pa & KVM_PTE_ADDR_MASK; ~ 000156dc: f94007e8 ldr x8, [sp, #8] kvm_phys_to_pte:143.21 (pgtable.c) sbepe kvm_pte_t pte = pa ║& KVM_PTE_ADDR_MASK; ~ 000156e0: 92748d08 and x8, x8, #0xfffffffff000 kvm_phys_to_pte:143.12 (pgtable.c) sbepe kvm_pte_t ║pte = pa & KVM_PTE_ADDR_MASK; ~ 000156e4: f90003e8 str x8, [sp] kvm_phys_to_pte:148.9 (pgtable.c) Sbepe return ║pte; ~ 000156e8: f94003e0 ldr x0, [sp] kvm_phys_to_pte:148.2 (pgtable.c) sbepe ║return pte; ~ 000156ec: 910043ff add sp, sp, #0x10 000156d8 CFA:r31+16 ~ 000156f0: d65f03c0 ret -pa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x156d4 0x156f4 (DW_OP_fbreg 0x8) kvm_phys_to_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:141 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x156d4 0x156f4 (DW_OP_fbreg 0x0) kvm_phys_to_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:143 **000156f4 <kasan_check_write>: + kasan_check_write params: +p param pointer(const(missing at <d70f1>/<e722a>)) 0x156f4 0x1570c (DW_OP_fbreg 0x8) +size param unsigned int (base type, DW_ATE_unsigned size:4) 0x156f4 0x1570c (DW_OP_fbreg 0x4) kasan_check_write:39.0 (kasan-checks.h) Sbepe ║{ 000156f4 CFA:r31 +p param pointer(const(missing at <d70f1>/<e722a>)) 0x156f4 0x1570c (DW_OP_fbreg 0x8) kasan_check_write:arch/arm64/kvm/hyp/nvhe/../pgtable.c:38 +size param unsigned int (base type, DW_ATE_unsigned size:4) 0x156f4 0x1570c (DW_OP_fbreg 0x4) kasan_check_write:arch/arm64/kvm/hyp/nvhe/../pgtable.c:38 ~ 000156f4: d10043ff sub sp, sp, #0x10 <- 000154b8(bl)<kasan_check_write>,000156a4(bl)<kasan_check_write> ~ 000156f8: f90007e0 str x0, [sp, #8] ~ 000156fc: b90007e1 str w1, [sp, #4] ~ 00015700: 52800020 mov w0, #0x1 // #1 kasan_check_write:40.2 (kasan-checks.h) SbePe ║return true; ~ 00015704: 910043ff add sp, sp, #0x10 000156f8 CFA:r31+16 ~ 00015708: d65f03c0 ret -p param pointer(const(missing at <d70f1>/<e722a>)) 0x156f4 0x1570c (DW_OP_fbreg 0x8) kasan_check_write:arch/arm64/kvm/hyp/nvhe/../pgtable.c:38 -size param unsigned int (base type, DW_ATE_unsigned size:4) 0x156f4 0x1570c (DW_OP_fbreg 0x4) kasan_check_write:arch/arm64/kvm/hyp/nvhe/../pgtable.c:38 **0001570c <stage2_map_walk_table_pre>: + stage2_map_walk_table_pre params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_breg31 0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1570c 0x157b0 (DW_OP_breg31 0x14) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1570c 0x157b0 (DW_OP_breg31 0x8) +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x1570c 0x157b0 (DW_OP_breg31 0x0) stage2_map_walk_table_pre:510.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_fbreg -0x10) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_breg31 0x18) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1570c 0x157b0 (DW_OP_breg31 0x14) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1570c 0x157b0 (DW_OP_breg31 0x8) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:508 +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x1570c 0x157b0 (DW_OP_breg31 0x0) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:509 ~ 0001570c: d10103ff sub sp, sp, #0x40 <- 00013fcc(bl)<stage2_map_walk_table_pre> ~ 00015710: a9037bfd stp x29, x30, [sp, #48] 0001570c CFA:r31 r29:u r30:u ~ 00015714: 9100c3fd add x29, sp, #0x30 ~ 00015718: f81f03a0 stur x0, [x29, #-16] ~ 0001571c: f9000fe1 str x1, [sp, #24] ~ 00015720: b90017e2 str w2, [sp, #20] ~ 00015724: f90007e3 str x3, [sp, #8] ~ 00015728: f90003e4 str x4, [sp] stage2_map_walk_table_pre:511.6 (pgtable.c) SbePe if (║data->anchor) ~ 0001572c: f94003e8 ldr x8, [sp] stage2_map_walk_table_pre:511.12 (pgtable.c) sbepe if (data->║anchor) ~ 00015730: f9400908 ldr x8, [x8, #16] stage2_map_walk_table_pre:511.6 (pgtable.c) sbepe if (║data->anchor) ~ ┌──00015734: b40000a8 cbz x8, 15748 <stage2_map_walk_table_pre+0x3c> ~ │┌─00015738: 14000001 b 1573c <stage2_map_walk_table_pre+0x30> <- 00015734(b.cc-succ)<fallthrough> ││ ~ │└>0001573c: 2a1f03e8 mov w8, wzr <- 00015738(b)<stage2_map_walk_table_pre+0x30> stage2_map_walk_table_pre:512.3 (pgtable.c) Sbepe ║return 0; ~ 00015740: b81fc3a8 stur w8, [x29, #-4] ~ ┌──┼──00015744: 14000017 b 157a0 <stage2_map_walk_table_pre+0x94> │ │ │ │ stage2_map_walk_table_pre:514.35 (pgtable.c) Sbepe if (!kvm_block_mapping_supported(║addr, end, data->phys, level)) ~ │ └─>00015748: f85f03a0 ldur x0, [x29, #-16] <- 00015734(b.cc)<stage2_map_walk_table_pre+0x3c> stage2_map_walk_table_pre:514.41 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, ║end, data->phys, level)) ~ 0001574c: f9400fe1 ldr x1, [sp, #24] stage2_map_walk_table_pre:514.46 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, ║data->phys, level)) ~ 00015750: f94003e8 ldr x8, [sp] stage2_map_walk_table_pre:514.52 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, data->║phys, level)) ~ 00015754: f9400102 ldr x2, [x8] stage2_map_walk_table_pre:514.58 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, data->phys, ║level)) ~ 00015758: b94017e3 ldr w3, [sp, #20] stage2_map_walk_table_pre:514.7 (pgtable.c) sbepe if (!║kvm_block_mapping_supported(addr, end, data->phys, level)) ~ 0001575c: 97ffff5f bl 154d8 <kvm_block_mapping_supported> stage2_map_walk_table_pre:514.6 (pgtable.c) sbepe if (║!kvm_block_mapping_supported(addr, end, data->phys, level)) ~ │ ┌──00015760: 370000a0 tbnz w0, #0, 15774 <stage2_map_walk_table_pre+0x68> <- 0001575c(bl-succ)<return> │ │ ~ │ │┌─00015764: 14000001 b 15768 <stage2_map_walk_table_pre+0x5c> <- 00015760(b.cc-succ)<fallthrough> │ ││ ~ │ │└>00015768: 2a1f03e8 mov w8, wzr <- 00015764(b)<stage2_map_walk_table_pre+0x5c> │ │ stage2_map_walk_table_pre:515.3 (pgtable.c) Sbepe ║return 0; ~ │ │ 0001576c: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌┼──00015770: 1400000c b 157a0 <stage2_map_walk_table_pre+0x94> │ ││ │ ││ stage2_map_walk_table_pre:517.22 (pgtable.c) Sbepe kvm_set_invalid_pte(║ptep); ~ │ │└─>00015774: f94007e0 ldr x0, [sp, #8] <- 00015760(b.cc)<stage2_map_walk_table_pre+0x68> │ │ stage2_map_walk_table_pre:517.2 (pgtable.c) sbepe ║kvm_set_invalid_pte(ptep); ~ │ │ 00015778: 940000b5 bl 15a4c <kvm_set_invalid_pte> │ │ │ │ stage2_map_walk_table_pre:524.2 (pgtable.c) Sbepe ║kvm_call_hyp(__kvm_tlb_flush_vmid, data->mmu); ~ │ │ 0001577c: f94003e8 ldr x8, [sp] <- 00015778(bl-succ)<return> ~ │ │ 00015780: f9400d00 ldr x0, [x8, #24] ~ │ │ 00015784: 97ffbfc3 bl 5690 <__kvm_tlb_flush_vmid> │ │ │ │ stage2_map_walk_table_pre:525.17 (pgtable.c) Sbepe data->anchor = ║ptep; ~ │ │ 00015788: f94007e8 ldr x8, [sp, #8] <- 00015784(bl-succ)<return> │ │ stage2_map_walk_table_pre:525.2 (pgtable.c) sbepe ║data->anchor = ptep; ~ │ │ 0001578c: f94003e9 ldr x9, [sp] │ │ stage2_map_walk_table_pre:525.15 (pgtable.c) sbepe data->anchor ║= ptep; ~ │ │ 00015790: f9000928 str x8, [x9, #16] ~ │ │ 00015794: 2a1f03ea mov w10, wzr │ │ stage2_map_walk_table_pre:526.2 (pgtable.c) Sbepe ║return 0; ~ │ │ 00015798: b81fc3aa stur w10, [x29, #-4] ~ │ │ ┌─0001579c: 14000001 b 157a0 <stage2_map_walk_table_pre+0x94> │ │ │ │ │ │ stage2_map_walk_table_pre:527.1 (pgtable.c) Sbepe ║} ~ └>└>└>000157a0: b85fc3a0 ldur w0, [x29, #-4] <- 00015744(b)<stage2_map_walk_table_pre+0x94>,00015770(b)<stage2_map_walk_table_pre+0x94>,0001579c(b)<stage2_map_walk_table_pre+0x94> ~ 000157a4: a9437bfd ldp x29, x30, [sp, #48] ~ 000157a8: 910103ff add sp, sp, #0x40 00015718 CFA:r29+16 r29:c-16 r30:c-8 ~ 000157ac: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_fbreg -0x10) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x1570c 0x157b0 (DW_OP_breg31 0x18) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x1570c 0x157b0 (DW_OP_breg31 0x14) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:507 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x1570c 0x157b0 (DW_OP_breg31 0x8) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:508 -data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x1570c 0x157b0 (DW_OP_breg31 0x0) stage2_map_walk_table_pre:arch/arm64/kvm/hyp/nvhe/../pgtable.c:509 **000157b0 <stage2_map_walk_leaf>: + stage2_map_walk_leaf params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x157b0 0x15968 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x157b0 0x15968 (DW_OP_fbreg -0x28) +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x157b0 0x15968 (DW_OP_breg31 0x30) stage2_map_walk_leaf:531.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x10) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x18) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x157b0 0x15968 (DW_OP_fbreg -0x1c) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x157b0 0x15968 (DW_OP_fbreg -0x28) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x157b0 0x15968 (DW_OP_breg31 0x30) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:530 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x157b0 0x15968 (DW_OP_breg31 0x28) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:532 +childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x157b0 0x15968 (DW_OP_breg31 0x20) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:533 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x157b0 0x15968 (DW_OP_breg31 0x18) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:533 ~ 000157b0: d101c3ff sub sp, sp, #0x70 <- 00013fec(bl)<stage2_map_walk_leaf>,00015a24(bl)<stage2_map_walk_leaf> ~ 000157b4: a9067bfd stp x29, x30, [sp, #96] 000157b0 CFA:r31 r29:u r30:u ~ 000157b8: 910183fd add x29, sp, #0x60 ~ 000157bc: f81f03a0 stur x0, [x29, #-16] ~ 000157c0: f81e83a1 stur x1, [x29, #-24] ~ 000157c4: b81e43a2 stur w2, [x29, #-28] ~ 000157c8: f81d83a3 stur x3, [x29, #-40] ~ 000157cc: f9001be4 str x4, [sp, #48] stage2_map_walk_leaf:532.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║data->mm_ops; ~ 000157d0: f9401be8 ldr x8, [sp, #48] stage2_map_walk_leaf:532.44 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *mm_ops = data->║mm_ops; ~ 000157d4: f9401508 ldr x8, [x8, #40] stage2_map_walk_leaf:532.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = data->mm_ops; ~ 000157d8: f90017e8 str x8, [sp, #40] stage2_map_walk_leaf:533.28 (pgtable.c) Sbepe kvm_pte_t *childp, pte = *║ptep; ~ 000157dc: f85d83a8 ldur x8, [x29, #-40] stage2_map_walk_leaf:533.27 (pgtable.c) sbepe kvm_pte_t *childp, pte = ║*ptep; ~ 000157e0: f9400108 ldr x8, [x8] stage2_map_walk_leaf:533.21 (pgtable.c) sbepe kvm_pte_t *childp, ║pte = *ptep; ~ 000157e4: f9000fe8 str x8, [sp, #24] stage2_map_walk_leaf:535.6 (pgtable.c) Sbepe if (║data->anchor) { ~ 000157e8: f9401be8 ldr x8, [sp, #48] stage2_map_walk_leaf:535.12 (pgtable.c) sbepe if (data->║anchor) { ~ 000157ec: f9400908 ldr x8, [x8, #16] stage2_map_walk_leaf:535.6 (pgtable.c) sbepe if (║data->anchor) { ~ ┌────000157f0: b40001c8 cbz x8, 15828 <stage2_map_walk_leaf+0x78> ~ │ ┌─000157f4: 14000001 b 157f8 <stage2_map_walk_leaf+0x48> <- 000157f0(b.cc-succ)<fallthrough> │ │ │ │ stage2_map_walk_leaf:536.21 (pgtable.c) Sbepe if (kvm_pte_valid(║pte)) ~ │ └>000157f8: f9400fe0 ldr x0, [sp, #24] <- 000157f4(b)<stage2_map_walk_leaf+0x48> stage2_map_walk_leaf:536.7 (pgtable.c) sbepe if (║kvm_pte_valid(pte)) ~ 000157fc: 97fffeb0 bl 152bc <kvm_pte_valid> stage2_map_walk_leaf:536.7 (pgtable.c) sbepe if (║kvm_pte_valid(pte)) ~ │┌───00015800: 360000e0 tbz w0, #0, 1581c <stage2_map_walk_leaf+0x6c> <- 000157fc(bl-succ)<return> ││ ~ ││ ┌─00015804: 14000001 b 15808 <stage2_map_walk_leaf+0x58> <- 00015800(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_map_walk_leaf:537.4 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ ││ └>00015808: f94017e8 ldr x8, [sp, #40] <- 00015804(b)<stage2_map_walk_leaf+0x58> ││ stage2_map_walk_leaf:537.12 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ ││ 0001580c: f9401108 ldr x8, [x8, #32] ││ stage2_map_walk_leaf:537.21 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ ││ 00015810: f85d83a0 ldur x0, [x29, #-40] ││ stage2_map_walk_leaf:537.4 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ ││ 00015814: d63f0100 blr x8 ~ ││ ┌─00015818: 14000001 b 1581c <stage2_map_walk_leaf+0x6c> ││ │ ~ │└>└>0001581c: 2a1f03e8 mov w8, wzr <- 00015800(b.cc)<stage2_map_walk_leaf+0x6c>,00015818(b)<stage2_map_walk_leaf+0x6c> stage2_map_walk_leaf:539.3 (pgtable.c) Sbepe ║return 0; ~ 00015820: b81fc3a8 stur w8, [x29, #-4] ~ ┌─────┼────00015824: 1400004d b 15958 <stage2_map_walk_leaf+0x1a8> │ │ │ │ stage2_map_walk_leaf:542.33 (pgtable.c) Sbepe if (stage2_map_walker_try_leaf(║addr, end, level, ptep, data)) ~ │ └───>00015828: f85f03a0 ldur x0, [x29, #-16] <- 000157f0(b.cc)<stage2_map_walk_leaf+0x78> stage2_map_walk_leaf:542.39 (pgtable.c) sbepe if (stage2_map_walker_try_leaf(addr, ║end, level, ptep, data)) ~ 0001582c: f85e83a1 ldur x1, [x29, #-24] stage2_map_walk_leaf:542.44 (pgtable.c) sbepe if (stage2_map_walker_try_leaf(addr, end, ║level, ptep, data)) ~ 00015830: b85e43a2 ldur w2, [x29, #-28] stage2_map_walk_leaf:542.51 (pgtable.c) sbepe if (stage2_map_walker_try_leaf(addr, end, level, ║ptep, data)) ~ 00015834: f85d83a3 ldur x3, [x29, #-40] stage2_map_walk_leaf:542.57 (pgtable.c) sbepe if (stage2_map_walker_try_leaf(addr, end, level, ptep, ║data)) ~ 00015838: f9401be4 ldr x4, [sp, #48] stage2_map_walk_leaf:542.6 (pgtable.c) sbepe if (║stage2_map_walker_try_leaf(addr, end, level, ptep, data)) ~ 0001583c: 94000095 bl 15a90 <stage2_map_walker_try_leaf> stage2_map_walk_leaf:542.6 (pgtable.c) sbepe if (║stage2_map_walker_try_leaf(addr, end, level, ptep, data)) ~ │ ┌──00015840: 36000060 tbz w0, #0, 1584c <stage2_map_walk_leaf+0x9c> <- 0001583c(bl-succ)<return> │ │ ~ │ │┌─00015844: 14000001 b 15848 <stage2_map_walk_leaf+0x98> <- 00015840(b.cc-succ)<fallthrough> │ ││ │ ││ stage2_map_walk_leaf:543.3 (pgtable.c) Sbepe ║goto out_get_page; ~ │ ┌──┼└>00015848: 1400003d b 1593c <stage2_map_walk_leaf+0x18c> <- 00015844(b)<stage2_map_walk_leaf+0x98> │ │ │ │ │ │ stage2_map_walk_leaf:545.6 (pgtable.c) Sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) +__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x1584c 0x15888 (DW_OP_breg31 0x14) lexblock:stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:545 ~ │ │ └─>0001584c: b85e43a8 ldur w8, [x29, #-28] <- 00015840(b.cc)<stage2_map_walk_leaf+0x9c> ~ │ │ 00015850: 71000d08 subs w8, w8, #0x3 ~ │ │ 00015854: 1a9f17e9 cset w9, eq // eq = none ~ │ │ 00015858: b90017e9 str w9, [sp, #20] │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ 0001585c: b94017e9 ldr w9, [sp, #20] │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ ┌───00015860: 34000089 cbz w9, 15870 <stage2_map_walk_leaf+0xc0> │ │ │ ~ │ │ │ ┌─00015864: 14000001 b 15868 <stage2_map_walk_leaf+0xb8> <- 00015860(b.cc-succ)<fallthrough> │ │ │ │ │ │ │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ │ └>00015868: d4210000 brk #0x800 <- 00015864(b)<stage2_map_walk_leaf+0xb8> ~ │ │ │ ┌─0001586c: 14000001 b 15870 <stage2_map_walk_leaf+0xc0> │ │ │ │ │ │ │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ └>└>00015870: b94017e8 ldr w8, [sp, #20] <- 00015860(b.cc)<stage2_map_walk_leaf+0xc0>,0001586c(b)<stage2_map_walk_leaf+0xc0> ~ │ │ 00015874: 71000108 subs w8, w8, #0x0 ~ │ │ 00015878: 1a9f07e9 cset w9, ne // ne = any ~ │ │ 0001587c: 2a0903ea mov w10, w9 │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ 00015880: f90007ea str x10, [sp, #8] │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ 00015884: f94007ea ldr x10, [sp, #8] -__ret_warn_on var int (base type, DW_ATE_signed size:4) 0x1584c 0x15888 (DW_OP_breg31 0x14) lexblock:stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:545 │ │ stage2_map_walk_leaf:545.6 (pgtable.c) sbepe if (║WARN_ON(level == KVM_PGTABLE_MAX_LEVELS - 1)) ~ │ │ ┌──00015888: b40000aa cbz x10, 1589c <stage2_map_walk_leaf+0xec> │ │ │ ~ │ │ │┌─0001588c: 14000001 b 15890 <stage2_map_walk_leaf+0xe0> <- 00015888(b.cc-succ)<fallthrough> │ │ ││ ~ │ │ │└>00015890: 128002a8 mov w8, #0xffffffea // #-22 <- 0001588c(b)<stage2_map_walk_leaf+0xe0> │ │ │ stage2_map_walk_leaf:546.3 (pgtable.c) Sbepe ║return -EINVAL; ~ │ │ │ 00015894: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌──┼──┼──00015898: 14000030 b 15958 <stage2_map_walk_leaf+0x1a8> │ │ │ │ │ │ │ │ stage2_map_walk_leaf:548.7 (pgtable.c) Sbepe if (!║data->memcache) ~ │ │ │ └─>0001589c: f9401be8 ldr x8, [sp, #48] <- 00015888(b.cc)<stage2_map_walk_leaf+0xec> │ │ │ stage2_map_walk_leaf:548.13 (pgtable.c) sbepe if (!data->║memcache) ~ │ │ │ 000158a0: f9401108 ldr x8, [x8, #32] │ │ │ stage2_map_walk_leaf:548.6 (pgtable.c) sbepe if (║!data->memcache) ~ │ │ │ ┌──000158a4: b50000a8 cbnz x8, 158b8 <stage2_map_walk_leaf+0x108> │ │ │ │ ~ │ │ │ │┌─000158a8: 14000001 b 158ac <stage2_map_walk_leaf+0xfc> <- 000158a4(b.cc-succ)<fallthrough> │ │ │ ││ ~ │ │ │ │└>000158ac: 12800168 mov w8, #0xfffffff4 // #-12 <- 000158a8(b)<stage2_map_walk_leaf+0xfc> │ │ │ │ stage2_map_walk_leaf:549.3 (pgtable.c) Sbepe ║return -ENOMEM; ~ │ │ │ │ 000158b0: b81fc3a8 stur w8, [x29, #-4] ~ │ │ ┌┼──┼──000158b4: 14000029 b 15958 <stage2_map_walk_leaf+0x1a8> │ │ ││ │ │ │ ││ │ stage2_map_walk_leaf:551.11 (pgtable.c) Sbepe childp = ║mm_ops->zalloc_page(data->memcache); ~ │ │ ││ └─>000158b8: f94017e8 ldr x8, [sp, #40] <- 000158a4(b.cc)<stage2_map_walk_leaf+0x108> │ │ ││ stage2_map_walk_leaf:551.19 (pgtable.c) sbepe childp = mm_ops->║zalloc_page(data->memcache); ~ │ │ ││ 000158bc: f9400108 ldr x8, [x8] │ │ ││ stage2_map_walk_leaf:551.31 (pgtable.c) sbepe childp = mm_ops->zalloc_page(║data->memcache); ~ │ │ ││ 000158c0: f9401be9 ldr x9, [sp, #48] │ │ ││ stage2_map_walk_leaf:551.37 (pgtable.c) sbepe childp = mm_ops->zalloc_page(data->║memcache); ~ │ │ ││ 000158c4: f9401120 ldr x0, [x9, #32] │ │ ││ stage2_map_walk_leaf:551.11 (pgtable.c) sbepe childp = ║mm_ops->zalloc_page(data->memcache); ~ │ │ ││ 000158c8: d63f0100 blr x8 │ │ ││ stage2_map_walk_leaf:551.9 (pgtable.c) sbepe childp ║= mm_ops->zalloc_page(data->memcache); ~ │ │ ││ 000158cc: f90013e0 str x0, [sp, #32] │ │ ││ stage2_map_walk_leaf:552.7 (pgtable.c) Sbepe if (!║childp) ~ │ │ ││ 000158d0: f94013e8 ldr x8, [sp, #32] │ │ ││ stage2_map_walk_leaf:552.6 (pgtable.c) sbepe if (║!childp) ~ │ │ ││ ┌──000158d4: b50000a8 cbnz x8, 158e8 <stage2_map_walk_leaf+0x138> │ │ ││ │ ~ │ │ ││ │┌─000158d8: 14000001 b 158dc <stage2_map_walk_leaf+0x12c> <- 000158d4(b.cc-succ)<fallthrough> │ │ ││ ││ ~ │ │ ││ │└>000158dc: 12800168 mov w8, #0xfffffff4 // #-12 <- 000158d8(b)<stage2_map_walk_leaf+0x12c> │ │ ││ │ stage2_map_walk_leaf:553.3 (pgtable.c) Sbepe ║return -ENOMEM; ~ │ │ ││ │ 000158e0: b81fc3a8 stur w8, [x29, #-4] ~ │ │ ││┌─┼──000158e4: 1400001d b 15958 <stage2_map_walk_leaf+0x1a8> │ │ │││ │ │ │ │││ │ stage2_map_walk_leaf:560.20 (pgtable.c) Sbepe if (kvm_pte_valid(║pte)) { ~ │ │ │││ └─>000158e8: f9400fe0 ldr x0, [sp, #24] <- 000158d4(b.cc)<stage2_map_walk_leaf+0x138> │ │ │││ stage2_map_walk_leaf:560.6 (pgtable.c) sbepe if (║kvm_pte_valid(pte)) { ~ │ │ │││ 000158ec: 97fffe74 bl 152bc <kvm_pte_valid> │ │ │││ │ │ │││ stage2_map_walk_leaf:560.6 (pgtable.c) sbepe if (║kvm_pte_valid(pte)) { ~ │ │ │││┌───000158f0: 360001c0 tbz w0, #0, 15928 <stage2_map_walk_leaf+0x178> <- 000158ec(bl-succ)<return> │ │ ││││ ~ │ │ ││││ ┌─000158f4: 14000001 b 158f8 <stage2_map_walk_leaf+0x148> <- 000158f0(b.cc-succ)<fallthrough> │ │ ││││ │ │ │ ││││ │ stage2_map_walk_leaf:561.23 (pgtable.c) Sbepe kvm_set_invalid_pte(║ptep); ~ │ │ ││││ └>000158f8: f85d83a0 ldur x0, [x29, #-40] <- 000158f4(b)<stage2_map_walk_leaf+0x148> │ │ ││││ stage2_map_walk_leaf:561.3 (pgtable.c) sbepe ║kvm_set_invalid_pte(ptep); ~ │ │ ││││ 000158fc: 94000054 bl 15a4c <kvm_set_invalid_pte> │ │ ││││ │ │ ││││ stage2_map_walk_leaf:562.3 (pgtable.c) Sbepe ║kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, data->mmu, addr, level); ~ │ │ ││││ 00015900: f9401be8 ldr x8, [sp, #48] <- 000158fc(bl-succ)<return> ~ │ │ ││││ 00015904: f9400d00 ldr x0, [x8, #24] ~ │ │ ││││ 00015908: f85f03a1 ldur x1, [x29, #-16] ~ │ │ ││││ 0001590c: b85e43a2 ldur w2, [x29, #-28] ~ │ │ ││││ 00015910: 97ffbd69 bl 4eb4 <__kvm_tlb_flush_vmid_ipa> │ │ ││││ │ │ ││││ stage2_map_walk_leaf:563.3 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ │ │ ││││ 00015914: f94017e8 ldr x8, [sp, #40] <- 00015910(bl-succ)<return> │ │ ││││ stage2_map_walk_leaf:563.11 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ │ │ ││││ 00015918: f9401108 ldr x8, [x8, #32] │ │ ││││ stage2_map_walk_leaf:563.20 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ │ │ ││││ 0001591c: f85d83a0 ldur x0, [x29, #-40] │ │ ││││ stage2_map_walk_leaf:563.3 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ │ │ ││││ 00015920: d63f0100 blr x8 │ │ ││││ stage2_map_walk_leaf:564.2 (pgtable.c) Sbepe } ~ │ │ ││││ ┌─00015924: 14000001 b 15928 <stage2_map_walk_leaf+0x178> │ │ ││││ │ │ │ ││││ │ stage2_map_walk_leaf:566.20 (pgtable.c) Sbepe kvm_set_table_pte(║ptep, childp, mm_ops); ~ │ │ │││└>└>00015928: f85d83a0 ldur x0, [x29, #-40] <- 000158f0(b.cc)<stage2_map_walk_leaf+0x178>,00015924(b)<stage2_map_walk_leaf+0x178> │ │ │││ stage2_map_walk_leaf:566.26 (pgtable.c) sbepe kvm_set_table_pte(ptep, ║childp, mm_ops); ~ │ │ │││ 0001592c: f94013e1 ldr x1, [sp, #32] │ │ │││ stage2_map_walk_leaf:566.34 (pgtable.c) sbepe kvm_set_table_pte(ptep, childp, ║mm_ops); ~ │ │ │││ 00015930: f94017e2 ldr x2, [sp, #40] │ │ │││ stage2_map_walk_leaf:566.2 (pgtable.c) sbepe ║kvm_set_table_pte(ptep, childp, mm_ops); ~ │ │ │││ 00015934: 97fffea7 bl 153d0 <kvm_set_table_pte> │ │ │││ ~ │ │ │││ ┌─00015938: 14000001 b 1593c <stage2_map_walk_leaf+0x18c> <- 00015934(bl-succ)<return> │ │ │││ │ │ │ │││ │ stage2_map_walk_leaf:569.2 (pgtable.c) Sbepe ║mm_ops->get_page(ptep); ~ │ │ │└┼─>└>0001593c: f94017e8 ldr x8, [sp, #40] <- 00015848(b)<stage2_map_walk_leaf+0x18c>,00015938(b)<stage2_map_walk_leaf+0x18c> │ │ │ │ stage2_map_walk_leaf:569.10 (pgtable.c) sbepe mm_ops->║get_page(ptep); ~ │ │ │ │ 00015940: f9400d08 ldr x8, [x8, #24] │ │ │ │ stage2_map_walk_leaf:569.19 (pgtable.c) sbepe mm_ops->get_page(║ptep); ~ │ │ │ │ 00015944: f85d83a0 ldur x0, [x29, #-40] │ │ │ │ stage2_map_walk_leaf:569.2 (pgtable.c) sbepe ║mm_ops->get_page(ptep); ~ │ │ │ │ 00015948: d63f0100 blr x8 ~ │ │ │ │ 0001594c: 2a1f03e9 mov w9, wzr │ │ │ │ stage2_map_walk_leaf:570.2 (pgtable.c) Sbepe ║return 0; ~ │ │ │ │ 00015950: b81fc3a9 stur w9, [x29, #-4] ~ │ │ │ │ ┌─00015954: 14000001 b 15958 <stage2_map_walk_leaf+0x1a8> │ │ │ │ │ │ │ │ │ │ stage2_map_walk_leaf:571.1 (pgtable.c) Sbepe ║} ~ └>└>└>└─>└>00015958: b85fc3a0 ldur w0, [x29, #-4] <- 00015824(b)<stage2_map_walk_leaf+0x1a8>,00015898(b)<stage2_map_walk_leaf+0x1a8>,000158b4(b)<stage2_map_walk_leaf+0x1a8>,000158e4(b)<stage2_map_walk_leaf+0x1a8>,00015954(b)<stage2_map_walk_leaf+0x1a8> ~ 0001595c: a9467bfd ldp x29, x30, [sp, #96] ~ 00015960: 9101c3ff add sp, sp, #0x70 000157bc CFA:r29+16 r29:c-16 r30:c-8 ~ 00015964: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x10) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x157b0 0x15968 (DW_OP_fbreg -0x18) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x157b0 0x15968 (DW_OP_fbreg -0x1c) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x157b0 0x15968 (DW_OP_fbreg -0x28) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:529 -data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x157b0 0x15968 (DW_OP_breg31 0x30) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:530 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x157b0 0x15968 (DW_OP_breg31 0x28) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:532 -childp var pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x157b0 0x15968 (DW_OP_breg31 0x20) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:533 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x157b0 0x15968 (DW_OP_breg31 0x18) stage2_map_walk_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:533 **00015968 <stage2_map_walk_table_post>: + stage2_map_walk_table_post params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15968 0x15a4c (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15968 0x15a4c (DW_OP_breg31 0x28) +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15968 0x15a4c (DW_OP_breg31 0x20) stage2_map_walk_table_post:576.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x10) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x18) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15968 0x15a4c (DW_OP_fbreg -0x1c) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15968 0x15a4c (DW_OP_breg31 0x28) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:574 +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15968 0x15a4c (DW_OP_breg31 0x20) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:575 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15968 0x15a4c (DW_OP_breg31 0x18) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:577 +ret var int (base type, DW_ATE_signed size:4) 0x15968 0x15a4c (DW_OP_breg31 0x14) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:578 ~ 00015968: d10183ff sub sp, sp, #0x60 <- 0001400c(bl)<stage2_map_walk_table_post> ~ 0001596c: a9057bfd stp x29, x30, [sp, #80] 00015968 CFA:r31 r29:u r30:u ~ 00015970: 910143fd add x29, sp, #0x50 ~ 00015974: f81f03a0 stur x0, [x29, #-16] ~ 00015978: f81e83a1 stur x1, [x29, #-24] ~ 0001597c: b81e43a2 stur w2, [x29, #-28] ~ 00015980: f90017e3 str x3, [sp, #40] ~ 00015984: f90013e4 str x4, [sp, #32] stage2_map_walk_table_post:577.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║data->mm_ops; ~ 00015988: f94013e8 ldr x8, [sp, #32] stage2_map_walk_table_post:577.44 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *mm_ops = data->║mm_ops; ~ 0001598c: f9401508 ldr x8, [x8, #40] stage2_map_walk_table_post:577.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = data->mm_ops; ~ 00015990: f9000fe8 str x8, [sp, #24] ~ 00015994: 2a1f03e9 mov w9, wzr stage2_map_walk_table_post:578.6 (pgtable.c) Sbepe int ║ret = 0; ~ 00015998: b90017e9 str w9, [sp, #20] stage2_map_walk_table_post:580.7 (pgtable.c) Sbepe if (!║data->anchor) ~ 0001599c: f94013e8 ldr x8, [sp, #32] stage2_map_walk_table_post:580.13 (pgtable.c) sbepe if (!data->║anchor) ~ 000159a0: f9400908 ldr x8, [x8, #16] stage2_map_walk_table_post:580.6 (pgtable.c) sbepe if (║!data->anchor) ~ ┌──000159a4: b50000a8 cbnz x8, 159b8 <stage2_map_walk_table_post+0x50> ~ │┌─000159a8: 14000001 b 159ac <stage2_map_walk_table_post+0x44> <- 000159a4(b.cc-succ)<fallthrough> ││ ~ │└>000159ac: 2a1f03e8 mov w8, wzr <- 000159a8(b)<stage2_map_walk_table_post+0x44> stage2_map_walk_table_post:581.3 (pgtable.c) Sbepe ║return 0; ~ 000159b0: b81fc3a8 stur w8, [x29, #-4] ~ ┌─┼──000159b4: 14000022 b 15a3c <stage2_map_walk_table_post+0xd4> │ │ │ │ stage2_map_walk_table_post:583.2 (pgtable.c) Sbepe ║mm_ops->put_page(kvm_pte_follow(*ptep, mm_ops)); ~ │ └─>000159b8: f9400fe8 ldr x8, [sp, #24] <- 000159a4(b.cc)<stage2_map_walk_table_post+0x50> stage2_map_walk_table_post:583.10 (pgtable.c) sbepe mm_ops->║put_page(kvm_pte_follow(*ptep, mm_ops)); ~ 000159bc: f9401109 ldr x9, [x8, #32] stage2_map_walk_table_post:583.35 (pgtable.c) sbepe mm_ops->put_page(kvm_pte_follow(*║ptep, mm_ops)); ~ 000159c0: f94017ea ldr x10, [sp, #40] stage2_map_walk_table_post:583.34 (pgtable.c) sbepe mm_ops->put_page(kvm_pte_follow(║*ptep, mm_ops)); ~ 000159c4: f9400140 ldr x0, [x10] stage2_map_walk_table_post:583.19 (pgtable.c) sbepe mm_ops->put_page(║kvm_pte_follow(*ptep, mm_ops)); ~ 000159c8: aa0803e1 mov x1, x8 ~ 000159cc: f90007e9 str x9, [sp, #8] ~ 000159d0: 97fffe2c bl 15280 <kvm_pte_follow> ~ 000159d4: f94007e8 ldr x8, [sp, #8] <- 000159d0(bl-succ)<return> stage2_map_walk_table_post:583.2 (pgtable.c) sbepe ║mm_ops->put_page(kvm_pte_follow(*ptep, mm_ops)); ~ 000159d8: d63f0100 blr x8 stage2_map_walk_table_post:584.2 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ 000159dc: f9400fe8 ldr x8, [sp, #24] stage2_map_walk_table_post:584.10 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ 000159e0: f9401108 ldr x8, [x8, #32] stage2_map_walk_table_post:584.19 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ 000159e4: f94017e0 ldr x0, [sp, #40] stage2_map_walk_table_post:584.2 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ 000159e8: d63f0100 blr x8 stage2_map_walk_table_post:586.6 (pgtable.c) Sbepe if (║data->anchor == ptep) { ~ 000159ec: f94013e8 ldr x8, [sp, #32] stage2_map_walk_table_post:586.12 (pgtable.c) sbepe if (data->║anchor == ptep) { ~ 000159f0: f9400908 ldr x8, [x8, #16] stage2_map_walk_table_post:586.22 (pgtable.c) sbepe if (data->anchor == ║ptep) { ~ 000159f4: f94017e9 ldr x9, [sp, #40] stage2_map_walk_table_post:586.6 (pgtable.c) sbepe if (║data->anchor == ptep) { ~ 000159f8: eb090108 subs x8, x8, x9 ~ │┌───000159fc: 540001a1 b.ne 15a30 <stage2_map_walk_table_post+0xc8> // b.any ││ ~ ││ ┌─00015a00: 14000001 b 15a04 <stage2_map_walk_table_post+0x9c> <- 000159fc(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_map_walk_table_post:587.3 (pgtable.c) Sbepe ║data->anchor = NULL; ~ ││ └>00015a04: f94013e8 ldr x8, [sp, #32] <- 00015a00(b)<stage2_map_walk_table_post+0x9c> ~ ││ 00015a08: aa1f03e9 mov x9, xzr ││ stage2_map_walk_table_post:587.16 (pgtable.c) sbepe data->anchor ║= NULL; ~ ││ 00015a0c: f9000909 str x9, [x8, #16] ││ stage2_map_walk_table_post:588.30 (pgtable.c) Sbepe ret = stage2_map_walk_leaf(║addr, end, level, ptep, data); ~ ││ 00015a10: f85f03a0 ldur x0, [x29, #-16] ││ stage2_map_walk_table_post:588.36 (pgtable.c) sbepe ret = stage2_map_walk_leaf(addr, ║end, level, ptep, data); ~ ││ 00015a14: f85e83a1 ldur x1, [x29, #-24] ││ stage2_map_walk_table_post:588.41 (pgtable.c) sbepe ret = stage2_map_walk_leaf(addr, end, ║level, ptep, data); ~ ││ 00015a18: b85e43a2 ldur w2, [x29, #-28] ││ stage2_map_walk_table_post:588.48 (pgtable.c) sbepe ret = stage2_map_walk_leaf(addr, end, level, ║ptep, data); ~ ││ 00015a1c: f94017e3 ldr x3, [sp, #40] ││ stage2_map_walk_table_post:588.54 (pgtable.c) sbepe ret = stage2_map_walk_leaf(addr, end, level, ptep, ║data); ~ ││ 00015a20: f94013e4 ldr x4, [sp, #32] ││ stage2_map_walk_table_post:588.9 (pgtable.c) sbepe ret = ║stage2_map_walk_leaf(addr, end, level, ptep, data); ~ ││ 00015a24: 97ffff63 bl 157b0 <stage2_map_walk_leaf> ││ ││ stage2_map_walk_table_post:588.7 (pgtable.c) sbepe ret ║= stage2_map_walk_leaf(addr, end, level, ptep, data); ~ ││ 00015a28: b90017e0 str w0, [sp, #20] <- 00015a24(bl-succ)<return> ││ stage2_map_walk_table_post:589.2 (pgtable.c) Sbepe } ~ ││ ┌─00015a2c: 14000001 b 15a30 <stage2_map_walk_table_post+0xc8> ││ │ ││ │ stage2_map_walk_table_post:591.9 (pgtable.c) Sbepe return ║ret; ~ │└>└>00015a30: b94017e8 ldr w8, [sp, #20] <- 000159fc(b.cc)<stage2_map_walk_table_post+0xc8>,00015a2c(b)<stage2_map_walk_table_post+0xc8> stage2_map_walk_table_post:591.2 (pgtable.c) sbepe ║return ret; ~ 00015a34: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00015a38: 14000001 b 15a3c <stage2_map_walk_table_post+0xd4> │ │ │ │ stage2_map_walk_table_post:592.1 (pgtable.c) Sbepe ║} ~ └─>└>00015a3c: b85fc3a0 ldur w0, [x29, #-4] <- 000159b4(b)<stage2_map_walk_table_post+0xd4>,00015a38(b)<stage2_map_walk_table_post+0xd4> ~ 00015a40: a9457bfd ldp x29, x30, [sp, #80] ~ 00015a44: 910183ff add sp, sp, #0x60 00015974 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015a48: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x10) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15968 0x15a4c (DW_OP_fbreg -0x18) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15968 0x15a4c (DW_OP_fbreg -0x1c) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:573 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15968 0x15a4c (DW_OP_breg31 0x28) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:574 -data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15968 0x15a4c (DW_OP_breg31 0x20) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:575 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15968 0x15a4c (DW_OP_breg31 0x18) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:577 -ret var int (base type, DW_ATE_signed size:4) 0x15968 0x15a4c (DW_OP_breg31 0x14) stage2_map_walk_table_post:arch/arm64/kvm/hyp/nvhe/../pgtable.c:578 **00015a4c <kvm_set_invalid_pte>: + kvm_set_invalid_pte params: +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a4c 0x15a90 (DW_OP_fbreg 0x8) kvm_set_invalid_pte:157.0 (pgtable.c) Sbepe ║{ 00015a4c CFA:r31 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a4c 0x15a90 (DW_OP_fbreg 0x8) kvm_set_invalid_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:156 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15a4c 0x15a90 (DW_OP_fbreg 0x0) kvm_set_invalid_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:158 ~ 00015a4c: d10043ff sub sp, sp, #0x10 <- 00014498(bl)<kvm_set_invalid_pte>,00015778(bl)<kvm_set_invalid_pte>,000158fc(bl)<kvm_set_invalid_pte>,00015b4c(bl)<kvm_set_invalid_pte> ~ 00015a50: f90007e0 str x0, [sp, #8] kvm_set_invalid_pte:158.19 (pgtable.c) SbePe kvm_pte_t pte = *║ptep; ~ 00015a54: f94007e8 ldr x8, [sp, #8] kvm_set_invalid_pte:158.18 (pgtable.c) sbepe kvm_pte_t pte = ║*ptep; ~ 00015a58: f9400108 ldr x8, [x8] kvm_set_invalid_pte:158.12 (pgtable.c) sbepe kvm_pte_t ║pte = *ptep; ~ 00015a5c: f90003e8 str x8, [sp] kvm_set_invalid_pte:159.2 (pgtable.c) Sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ ┌─00015a60: 14000001 b 15a64 <kvm_set_invalid_pte+0x18> kvm_set_invalid_pte:159.2 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ ┌─└>00015a64: 14000001 b 15a68 <kvm_set_invalid_pte+0x1c> <- 00015a60(b)<kvm_set_invalid_pte+0x18> kvm_set_invalid_pte:159.2 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ ┌─└──>00015a68: 14000001 b 15a6c <kvm_set_invalid_pte+0x20> <- 00015a64(b)<kvm_set_invalid_pte+0x1c> kvm_set_invalid_pte:159.2 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ ┌─└────>00015a6c: 14000001 b 15a70 <kvm_set_invalid_pte+0x24> <- 00015a68(b)<kvm_set_invalid_pte+0x20> kvm_set_invalid_pte:159.2 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ └──────>00015a70: f94003e8 ldr x8, [sp] <- 00015a6c(b)<kvm_set_invalid_pte+0x24> ~ 00015a74: 927ff908 and x8, x8, #0xfffffffffffffffe ~ 00015a78: f94007e9 ldr x9, [sp, #8] ~ 00015a7c: f9000128 str x8, [x9] ~ ┌─00015a80: 14000001 b 15a84 <kvm_set_invalid_pte+0x38> kvm_set_invalid_pte:159.2 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte & ~KVM_PTE_VALID); ~ ┌─└>00015a84: 14000001 b 15a88 <kvm_set_invalid_pte+0x3c> <- 00015a80(b)<kvm_set_invalid_pte+0x38> kvm_set_invalid_pte:160.1 (pgtable.c) Sbepe ║} ~ └──>00015a88: 910043ff add sp, sp, #0x10 <- 00015a84(b)<kvm_set_invalid_pte+0x3c> 00015a50 CFA:r31+16 ~ 00015a8c: d65f03c0 ret -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a4c 0x15a90 (DW_OP_fbreg 0x8) kvm_set_invalid_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:156 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15a4c 0x15a90 (DW_OP_fbreg 0x0) kvm_set_invalid_pte:arch/arm64/kvm/hyp/nvhe/../pgtable.c:158 **00015a90 <stage2_map_walker_try_leaf>: + stage2_map_walker_try_leaf params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a90 0x15bb0 (DW_OP_breg31 0x28) +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15a90 0x15bb0 (DW_OP_breg31 0x20) stage2_map_walker_try_leaf:479.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x10) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x18) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x1c) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a90 0x15bb0 (DW_OP_breg31 0x28) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:477 +data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15a90 0x15bb0 (DW_OP_breg31 0x20) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:478 +mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15a90 0x15bb0 (DW_OP_breg31 0x18) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:480 +granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_breg31 0x10) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:481 +phys var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_breg31 0x8) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:481 ~ 00015a90: d10183ff sub sp, sp, #0x60 <- 0001583c(bl)<stage2_map_walker_try_leaf> ~ 00015a94: a9057bfd stp x29, x30, [sp, #80] 00015a90 CFA:r31 r29:u r30:u ~ 00015a98: 910143fd add x29, sp, #0x50 ~ 00015a9c: f81f03a0 stur x0, [x29, #-16] ~ 00015aa0: f81e83a1 stur x1, [x29, #-24] ~ 00015aa4: b81e43a2 stur w2, [x29, #-28] ~ 00015aa8: f90017e3 str x3, [sp, #40] ~ 00015aac: f90013e4 str x4, [sp, #32] stage2_map_walker_try_leaf:480.38 (pgtable.c) SbePe struct kvm_pgtable_mm_ops *mm_ops = ║data->mm_ops; ~ 00015ab0: f94013e8 ldr x8, [sp, #32] stage2_map_walker_try_leaf:480.44 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *mm_ops = data->║mm_ops; ~ 00015ab4: f9401508 ldr x8, [x8, #40] stage2_map_walker_try_leaf:480.29 (pgtable.c) sbepe struct kvm_pgtable_mm_ops *║mm_ops = data->mm_ops; ~ 00015ab8: f9000fe8 str x8, [sp, #24] stage2_map_walker_try_leaf:481.33 (pgtable.c) Sbepe u64 granule = kvm_granule_size(║level), phys = data->phys; ~ 00015abc: b85e43a0 ldur w0, [x29, #-28] stage2_map_walker_try_leaf:481.16 (pgtable.c) sbepe u64 granule = ║kvm_granule_size(level), phys = data->phys; ~ 00015ac0: 97fffde4 bl 15250 <kvm_granule_size> stage2_map_walker_try_leaf:481.6 (pgtable.c) sbepe u64 ║granule = kvm_granule_size(level), phys = data->phys; ~ 00015ac4: f9000be0 str x0, [sp, #16] <- 00015ac0(bl-succ)<return> stage2_map_walker_try_leaf:481.48 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), phys = ║data->phys; ~ 00015ac8: f94013e8 ldr x8, [sp, #32] stage2_map_walker_try_leaf:481.54 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), phys = data->║phys; ~ 00015acc: f9400108 ldr x8, [x8] stage2_map_walker_try_leaf:481.41 (pgtable.c) sbepe u64 granule = kvm_granule_size(level), ║phys = data->phys; ~ 00015ad0: f90007e8 str x8, [sp, #8] stage2_map_walker_try_leaf:483.35 (pgtable.c) Sbepe if (!kvm_block_mapping_supported(║addr, end, phys, level)) ~ 00015ad4: f85f03a0 ldur x0, [x29, #-16] stage2_map_walker_try_leaf:483.41 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, ║end, phys, level)) ~ 00015ad8: f85e83a1 ldur x1, [x29, #-24] stage2_map_walker_try_leaf:483.46 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, ║phys, level)) ~ 00015adc: f94007e2 ldr x2, [sp, #8] stage2_map_walker_try_leaf:483.52 (pgtable.c) sbepe if (!kvm_block_mapping_supported(addr, end, phys, ║level)) ~ 00015ae0: b85e43a3 ldur w3, [x29, #-28] stage2_map_walker_try_leaf:483.7 (pgtable.c) sbepe if (!║kvm_block_mapping_supported(addr, end, phys, level)) ~ 00015ae4: 97fffe7d bl 154d8 <kvm_block_mapping_supported> stage2_map_walker_try_leaf:483.6 (pgtable.c) sbepe if (║!kvm_block_mapping_supported(addr, end, phys, level)) ~ ┌──00015ae8: 370000a0 tbnz w0, #0, 15afc <stage2_map_walker_try_leaf+0x6c> <- 00015ae4(bl-succ)<return> ~ │┌─00015aec: 14000001 b 15af0 <stage2_map_walker_try_leaf+0x60> <- 00015ae8(b.cc-succ)<fallthrough> ││ ~ │└>00015af0: 2a1f03e8 mov w8, wzr <- 00015aec(b)<stage2_map_walker_try_leaf+0x60> stage2_map_walker_try_leaf:484.3 (pgtable.c) Sbepe ║return false; ~ 00015af4: 381ff3a8 sturb w8, [x29, #-1] ~ ┌─┼──00015af8: 1400002a b 15ba0 <stage2_map_walker_try_leaf+0x110> │ │ │ │ stage2_map_walker_try_leaf:492.21 (pgtable.c) Sbepe if (kvm_pte_valid(*║ptep)) ~ │ └─>00015afc: f94017e8 ldr x8, [sp, #40] <- 00015ae8(b.cc)<stage2_map_walker_try_leaf+0x6c> stage2_map_walker_try_leaf:492.20 (pgtable.c) sbepe if (kvm_pte_valid(║*ptep)) ~ 00015b00: f9400100 ldr x0, [x8] stage2_map_walker_try_leaf:492.6 (pgtable.c) sbepe if (║kvm_pte_valid(*ptep)) ~ 00015b04: 97fffdee bl 152bc <kvm_pte_valid> stage2_map_walker_try_leaf:492.6 (pgtable.c) sbepe if (║kvm_pte_valid(*ptep)) ~ │┌───00015b08: 360000e0 tbz w0, #0, 15b24 <stage2_map_walker_try_leaf+0x94> <- 00015b04(bl-succ)<return> ││ ~ ││ ┌─00015b0c: 14000001 b 15b10 <stage2_map_walker_try_leaf+0x80> <- 00015b08(b.cc-succ)<fallthrough> ││ │ ││ │ stage2_map_walker_try_leaf:493.3 (pgtable.c) Sbepe ║mm_ops->put_page(ptep); ~ ││ └>00015b10: f9400fe8 ldr x8, [sp, #24] <- 00015b0c(b)<stage2_map_walker_try_leaf+0x80> ││ stage2_map_walker_try_leaf:493.11 (pgtable.c) sbepe mm_ops->║put_page(ptep); ~ ││ 00015b14: f9401108 ldr x8, [x8, #32] ││ stage2_map_walker_try_leaf:493.20 (pgtable.c) sbepe mm_ops->put_page(║ptep); ~ ││ 00015b18: f94017e0 ldr x0, [sp, #40] ││ stage2_map_walker_try_leaf:493.3 (pgtable.c) sbepe ║mm_ops->put_page(ptep); ~ ││ 00015b1c: d63f0100 blr x8 ~ ││ ┌─00015b20: 14000001 b 15b24 <stage2_map_walker_try_leaf+0x94> ││ │ ││ │ stage2_map_walker_try_leaf:495.29 (pgtable.c) Sbepe if (kvm_set_valid_leaf_pte(║ptep, phys, data->attr, level)) ~ │└>└>00015b24: f94017e0 ldr x0, [sp, #40] <- 00015b08(b.cc)<stage2_map_walker_try_leaf+0x94>,00015b20(b)<stage2_map_walker_try_leaf+0x94> stage2_map_walker_try_leaf:495.35 (pgtable.c) sbepe if (kvm_set_valid_leaf_pte(ptep, ║phys, data->attr, level)) ~ 00015b28: f94007e1 ldr x1, [sp, #8] stage2_map_walker_try_leaf:495.41 (pgtable.c) sbepe if (kvm_set_valid_leaf_pte(ptep, phys, ║data->attr, level)) ~ 00015b2c: f94013e8 ldr x8, [sp, #32] stage2_map_walker_try_leaf:495.47 (pgtable.c) sbepe if (kvm_set_valid_leaf_pte(ptep, phys, data->║attr, level)) ~ 00015b30: f9400502 ldr x2, [x8, #8] stage2_map_walker_try_leaf:495.53 (pgtable.c) sbepe if (kvm_set_valid_leaf_pte(ptep, phys, data->attr, ║level)) ~ 00015b34: b85e43a3 ldur w3, [x29, #-28] stage2_map_walker_try_leaf:495.6 (pgtable.c) sbepe if (║kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)) ~ 00015b38: 97fffe99 bl 1559c <kvm_set_valid_leaf_pte> stage2_map_walker_try_leaf:495.6 (pgtable.c) sbepe if (║kvm_set_valid_leaf_pte(ptep, phys, data->attr, level)) ~ │ ┌──00015b3c: 36000060 tbz w0, #0, 15b48 <stage2_map_walker_try_leaf+0xb8> <- 00015b38(bl-succ)<return> │ │ ~ │ │┌─00015b40: 14000001 b 15b44 <stage2_map_walker_try_leaf+0xb4> <- 00015b3c(b.cc-succ)<fallthrough> │ ││ │ ││ stage2_map_walker_try_leaf:496.3 (pgtable.c) Sbepe ║goto out; ~ │┌┼└>00015b44: 1400000f b 15b80 <stage2_map_walker_try_leaf+0xf0> <- 00015b40(b)<stage2_map_walker_try_leaf+0xb4> │││ │││ stage2_map_walker_try_leaf:499.22 (pgtable.c) Sbepe kvm_set_invalid_pte(║ptep); ~ ││└─>00015b48: f94017e0 ldr x0, [sp, #40] <- 00015b3c(b.cc)<stage2_map_walker_try_leaf+0xb8> ││ stage2_map_walker_try_leaf:499.2 (pgtable.c) sbepe ║kvm_set_invalid_pte(ptep); ~ ││ 00015b4c: 97ffffc0 bl 15a4c <kvm_set_invalid_pte> ││ ││ stage2_map_walker_try_leaf:500.2 (pgtable.c) Sbepe ║kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, data->mmu, addr, level); ~ ││ 00015b50: f94013e8 ldr x8, [sp, #32] <- 00015b4c(bl-succ)<return> ~ ││ 00015b54: f9400d00 ldr x0, [x8, #24] ~ ││ 00015b58: f85f03a1 ldur x1, [x29, #-16] ~ ││ 00015b5c: b85e43a2 ldur w2, [x29, #-28] ~ ││ 00015b60: 97ffbcd5 bl 4eb4 <__kvm_tlb_flush_vmid_ipa> ││ ││ stage2_map_walker_try_leaf:501.25 (pgtable.c) Sbepe kvm_set_valid_leaf_pte(║ptep, phys, data->attr, level); ~ ││ 00015b64: f94017e0 ldr x0, [sp, #40] <- 00015b60(bl-succ)<return> ││ stage2_map_walker_try_leaf:501.31 (pgtable.c) sbepe kvm_set_valid_leaf_pte(ptep, ║phys, data->attr, level); ~ ││ 00015b68: f94007e1 ldr x1, [sp, #8] ││ stage2_map_walker_try_leaf:501.37 (pgtable.c) sbepe kvm_set_valid_leaf_pte(ptep, phys, ║data->attr, level); ~ ││ 00015b6c: f94013e8 ldr x8, [sp, #32] ││ stage2_map_walker_try_leaf:501.43 (pgtable.c) sbepe kvm_set_valid_leaf_pte(ptep, phys, data->║attr, level); ~ ││ 00015b70: f9400502 ldr x2, [x8, #8] ││ stage2_map_walker_try_leaf:501.49 (pgtable.c) sbepe kvm_set_valid_leaf_pte(ptep, phys, data->attr, ║level); ~ ││ 00015b74: b85e43a3 ldur w3, [x29, #-28] ││ stage2_map_walker_try_leaf:501.2 (pgtable.c) sbepe ║kvm_set_valid_leaf_pte(ptep, phys, data->attr, level); ~ ││ 00015b78: 97fffe89 bl 1559c <kvm_set_valid_leaf_pte> ││ ~ ││ ┌─00015b7c: 14000001 b 15b80 <stage2_map_walker_try_leaf+0xf0> <- 00015b78(bl-succ)<return> ││ │ ││ │ stage2_map_walker_try_leaf:503.16 (pgtable.c) Sbepe data->phys += ║granule; ~ │└>└>00015b80: f9400be8 ldr x8, [sp, #16] <- 00015b44(b)<stage2_map_walker_try_leaf+0xf0>,00015b7c(b)<stage2_map_walker_try_leaf+0xf0> stage2_map_walker_try_leaf:503.2 (pgtable.c) sbepe ║data->phys += granule; ~ 00015b84: f94013e9 ldr x9, [sp, #32] stage2_map_walker_try_leaf:503.13 (pgtable.c) sbepe data->phys ║+= granule; ~ 00015b88: f940012a ldr x10, [x9] ~ 00015b8c: 8b080148 add x8, x10, x8 ~ 00015b90: f9000128 str x8, [x9] ~ 00015b94: 5280002b mov w11, #0x1 // #1 stage2_map_walker_try_leaf:504.2 (pgtable.c) Sbepe ║return true; ~ 00015b98: 381ff3ab sturb w11, [x29, #-1] ~ │ ┌─00015b9c: 14000001 b 15ba0 <stage2_map_walker_try_leaf+0x110> │ │ │ │ stage2_map_walker_try_leaf:505.1 (pgtable.c) Sbepe ║} ~ └─>└>00015ba0: 385ff3a0 ldurb w0, [x29, #-1] <- 00015af8(b)<stage2_map_walker_try_leaf+0x110>,00015b9c(b)<stage2_map_walker_try_leaf+0x110> ~ 00015ba4: a9457bfd ldp x29, x30, [sp, #80] ~ 00015ba8: 910183ff add sp, sp, #0x60 00015a9c CFA:r29+16 r29:c-16 r30:c-8 ~ 00015bac: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x10) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x18) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15a90 0x15bb0 (DW_OP_fbreg -0x1c) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:476 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15a90 0x15bb0 (DW_OP_breg31 0x28) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:477 -data param pointer(struct stage2_map_data<d70f1>/<e7179>) 0x15a90 0x15bb0 (DW_OP_breg31 0x20) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:478 -mm_ops var pointer(struct kvm_pgtable_mm_ops<d70f1>/<d8ef3>) 0x15a90 0x15bb0 (DW_OP_breg31 0x18) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:480 -granule var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_breg31 0x10) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:481 -phys var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15a90 0x15bb0 (DW_OP_breg31 0x8) stage2_map_walker_try_leaf:arch/arm64/kvm/hyp/nvhe/../pgtable.c:481 **00015bb0 <stage2_pte_cacheable>: + stage2_pte_cacheable params: +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15bb0 0x15cd8 (DW_OP_fbreg 0x20) stage2_pte_cacheable:667.0 (pgtable.c) Sbepe ║{ 00015bb0 CFA:r31 +pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15bb0 0x15cd8 (DW_OP_fbreg 0x20) stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:666 +memattr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15bb0 0x15cd8 (DW_OP_fbreg 0x18) stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:668 ~ 00015bb0: d10183ff sub sp, sp, #0x60 <- 00014478(bl)<stage2_pte_cacheable>,000149fc(bl)<stage2_pte_cacheable> ~ 00015bb4: f90013e0 str x0, [sp, #32] stage2_pte_cacheable:668.16 (pgtable.c) SbePe u64 memattr = ║pte & KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR; ~ 00015bb8: f94013e8 ldr x8, [sp, #32] stage2_pte_cacheable:668.20 (pgtable.c) sbepe u64 memattr = pte ║& KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR; ~ 00015bbc: 927e0d08 and x8, x8, #0x3c stage2_pte_cacheable:668.6 (pgtable.c) sbepe u64 ║memattr = pte & KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR; ~ 00015bc0: f9000fe8 str x8, [sp, #24] stage2_pte_cacheable:669.9 (pgtable.c) Sbepe return ║memattr == PAGE_S2_MEMATTR(NORMAL); ~ 00015bc4: f9400fe8 ldr x8, [sp, #24] ~ 00015bc8: 52800409 mov w9, #0x20 // #32 ~ 00015bcc: b9002be9 str w9, [sp, #40] e: 0x15bd0 0x15c8c cpus_have_const_cap inlined from stage2_pte_cacheable:669 (pgtable.c) <d8c39>:<lexical_block>: e cpus_have_const_cap:479.30 (cpufeature.h) Sbepe return cpus_have_final_cap(║num); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15bd0 0x15cc8 (DW_OP_fbreg 0x10) lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:669 +num param int (base type, DW_ATE_signed size:4) 0x15bd0 0x15c8c (DW_OP_fbreg 0x28) cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~e 00015bd0: b9402be9 ldr w9, [sp, #40] ~e 00015bd4: b90033e9 str w9, [sp, #48] f: 0x15bd8 0x15c84 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <d8c56>:<d8c39>:<lexical_block>: g: 0x15bd8 0x15c04 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <d8c73>:<d8c56>:<d8c39>:<lexical_block>: efg 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) 0x15bd8 0x15c84 (DW_OP_fbreg 0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15bd8 0x15c04 (DW_OP_fbreg 0x44) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~efg 00015bd8: d000002a adrp x10, 1b000 <hyp_memory+0x460> ~efg 00015bdc: b9479949 ldr w9, [x10, #1944] ~efg 00015be0: 71000129 subs w9, w9, #0x0 ~efg 00015be4: 1a9f07eb cset w11, ne // ne = any ~efg 00015be8: 390113eb strb w11, [sp, #68] efg system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~efg 00015bec: 394113eb ldrb w11, [sp, #68] ~efg 00015bf0: 2a0b03ea mov w10, w11 ~efg 00015bf4: 9240014a and x10, x10, #0x1 efg system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~efg 00015bf8: f9001fea str x10, [sp, #56] efg system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~efg 00015bfc: f9401fea ldr x10, [sp, #56] ~efg 00015c00: f90003e8 str x8, [sp] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15bd8 0x15c04 (DW_OP_fbreg 0x44) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ef cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~ef ┌────00015c04: b400038a cbz x10, 15c74 <stage2_pte_cacheable+0xc4> ~ef │ ┌─00015c08: 14000001 b 15c0c <stage2_pte_cacheable+0x5c> <- 00015c04(b.cc-succ)<fallthrough> │ │ ef │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~ef │ └>00015c0c: b94033e8 ldr w8, [sp, #48] <- 00015c08(b)<stage2_pte_cacheable+0x5c> ~ef 00015c10: b9005be8 str w8, [sp, #88] h: 0x15c14 0x15c74 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8ca0>:<d8c56>:<d8c39>:<lexical_block>: efh __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0x15c14 0x15c74 (DW_OP_fbreg 0x58) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~efh 00015c14: b9405be8 ldr w8, [sp, #88] efh __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~efh 00015c18: 7100f508 subs w8, w8, #0x3d ~efh │ ┌──00015c1c: 540000ab b.lt 15c30 <stage2_pte_cacheable+0x80> // b.tstop │ │ ~efh │ │┌─00015c20: 14000001 b 15c24 <stage2_pte_cacheable+0x74> <- 00015c1c(b.cc-succ)<fallthrough> │ ││ ~efh │ │└>00015c24: 2a1f03e8 mov w8, wzr <- 00015c20(b)<stage2_pte_cacheable+0x74> efh │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~efh │ │ 00015c28: 39017fe8 strb w8, [sp, #95] ~efh │┌┼──00015c2c: 14000013 b 15c78 <stage2_pte_cacheable+0xc8> │││ efh │││ __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)) 0x15c30 0x15c64 (DW_OP_fbreg 0x54) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~efh ││└─>00015c30: b9805be8 ldrsw x8, [sp, #88] <- 00015c1c(b.cc)<stage2_pte_cacheable+0x80> ~efh ││ 00015c34: d37ced08 lsl x8, x8, #4 ~efh ││ 00015c38: d0000029 adrp x9, 1b000 <hyp_memory+0x460> ~efh ││ 00015c3c: 911e8129 add x9, x9, #0x7a0 ~efh ││ 00015c40: b868692a ldr w10, [x9, x8] ~efh ││ 00015c44: 7100014a subs w10, w10, #0x0 ~efh ││ 00015c48: 1a9f07eb cset w11, ne // ne = any ~efh ││ 00015c4c: 390153eb strb w11, [sp, #84] efh ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~efh ││ 00015c50: 394153eb ldrb w11, [sp, #84] ~efh ││ 00015c54: 2a0b03e8 mov w8, w11 ~efh ││ 00015c58: 92400108 and x8, x8, #0x1 efh ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~efh ││ 00015c5c: f90027e8 str x8, [sp, #72] efh ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~efh ││ 00015c60: f94027e8 ldr x8, [sp, #72] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15c30 0x15c64 (DW_OP_fbreg 0x54) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c efh ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~efh ││ 00015c64: f1000108 subs x8, x8, #0x0 ~efh ││ 00015c68: 1a9f07eb cset w11, ne // ne = any efh ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~efh ││ 00015c6c: 39017feb strb w11, [sp, #95] ~efh ││ ┌─00015c70: 14000002 b 15c78 <stage2_pte_cacheable+0xc8> -num param int (base type, DW_ATE_signed size:4) 0x15c14 0x15c74 (DW_OP_fbreg 0x58) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ││ │ ef ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~ef └┼─┼>00015c74: d4210000 brk #0x800 <- 00015c04(b.cc)<stage2_pte_cacheable+0xc4> │ │ i: 0x15c78 0x15c7c (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8ca0>:<d8c56>:<d8c39>:<lexical_block>: efi │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0x15c78 0x15c7c (DW_OP_fbreg 0x58) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~efi └>└>00015c78: 39417fe8 ldrb w8, [sp, #95] <- 00015c2c(b)<stage2_pte_cacheable+0xc8>,00015c70(b)<stage2_pte_cacheable+0xc8> -num param int (base type, DW_ATE_signed size:4) 0x15c78 0x15c7c (DW_OP_fbreg 0x58) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c ef cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~ef 00015c7c: 3900dfe8 strb w8, [sp, #55] ef cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~ef 00015c80: 3940dfe8 ldrb w8, [sp, #55] -num param int (base type, DW_ATE_signed size:4) 0x15bd8 0x15c84 (DW_OP_fbreg 0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c e cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~e 00015c84: 3900bfe8 strb w8, [sp, #47] e cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~e 00015c88: 3940bfe8 ldrb w8, [sp, #47] -num param int (base type, DW_ATE_signed size:4) 0x15bd0 0x15c8c (DW_OP_fbreg 0x28) cpus_have_const_cap(inlined):lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c stage2_pte_cacheable:669.20 (pgtable.c) Sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ 00015c8c: 71000508 subs w8, w8, #0x1 ~ ┌──00015c90: 540000c1 b.ne 15ca8 <stage2_pte_cacheable+0xf8> // b.any ~ │┌─00015c94: 14000001 b 15c98 <stage2_pte_cacheable+0xe8> <- 00015c90(b.cc-succ)<fallthrough> ││ ~ │└>00015c98: 52800308 mov w8, #0x18 // #24 <- 00015c94(b)<stage2_pte_cacheable+0xe8> ~ 00015c9c: 2a0803e9 mov w9, w8 stage2_pte_cacheable:669.20 (pgtable.c) sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ 00015ca0: f9000be9 str x9, [sp, #16] ~ ┌┼──00015ca4: 14000005 b 15cb8 <stage2_pte_cacheable+0x108> ││ ~ │└─>00015ca8: 52800788 mov w8, #0x3c // #60 <- 00015c90(b.cc)<stage2_pte_cacheable+0xf8> ~ 00015cac: 2a0803e9 mov w9, w8 stage2_pte_cacheable:669.20 (pgtable.c) sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ 00015cb0: f9000be9 str x9, [sp, #16] ~ │ ┌─00015cb4: 14000001 b 15cb8 <stage2_pte_cacheable+0x108> │ │ │ │ stage2_pte_cacheable:669.20 (pgtable.c) sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ └>└>00015cb8: f9400be8 ldr x8, [sp, #16] <- 00015ca4(b)<stage2_pte_cacheable+0x108>,00015cb4(b)<stage2_pte_cacheable+0x108> stage2_pte_cacheable:669.20 (pgtable.c) sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ 00015cbc: f90007e8 str x8, [sp, #8] stage2_pte_cacheable:669.20 (pgtable.c) sbepe return memattr == ║PAGE_S2_MEMATTR(NORMAL); ~ 00015cc0: f94007e8 ldr x8, [sp, #8] ~ 00015cc4: f94003e9 ldr x9, [sp] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15bd0 0x15cc8 (DW_OP_fbreg 0x10) lexblock:stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:669 stage2_pte_cacheable:669.17 (pgtable.c) sbepe return memattr ║== PAGE_S2_MEMATTR(NORMAL); ~ 00015cc8: eb080128 subs x8, x9, x8 ~ 00015ccc: 1a9f17e0 cset w0, eq // eq = none stage2_pte_cacheable:669.2 (pgtable.c) sbepe ║return memattr == PAGE_S2_MEMATTR(NORMAL); ~ 00015cd0: 910183ff add sp, sp, #0x60 00015bb4 CFA:r31+96 ~ 00015cd4: d65f03c0 ret -pte param typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15bb0 0x15cd8 (DW_OP_fbreg 0x20) stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:666 -memattr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15bb0 0x15cd8 (DW_OP_fbreg 0x18) stage2_pte_cacheable:arch/arm64/kvm/hyp/nvhe/../pgtable.c:668 **00015cd8 <stage2_flush_dcache>: + stage2_flush_dcache params: +addr param pointer(no type) 0x15cd8 0x15dd8 (DW_OP_breg31 0x10) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15cd8 0x15dd8 (DW_OP_breg31 0x8) stage2_flush_dcache:659.0 (pgtable.c) Sbepe ║{ +addr param pointer(no type) 0x15cd8 0x15dd8 (DW_OP_breg31 0x10) stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c:658 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15cd8 0x15dd8 (DW_OP_breg31 0x8) stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c:658 ~ 00015cd8: d10183ff sub sp, sp, #0x60 <- 000144f4(bl)<stage2_flush_dcache>,00014a40(bl)<stage2_flush_dcache> ~ 00015cdc: a9057bfd stp x29, x30, [sp, #80] 00015cd8 CFA:r31 r29:u r30:u ~ 00015ce0: 910143fd add x29, sp, #0x50 ~ 00015ce4: f9000be0 str x0, [sp, #16] ~ 00015ce8: f90007e1 str x1, [sp, #8] ~ 00015cec: 52800408 mov w8, #0x20 // #32 ~ 00015cf0: b9001be8 str w8, [sp, #24] j: 0x15cf4 0x15dac cpus_have_const_cap inlined from stage2_flush_dcache:660 (pgtable.c) <d8d06>: j 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) 0x15cf4 0x15dac (DW_OP_breg31 0x18) cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~j 00015cf4: b9401be8 ldr w8, [sp, #24] ~j 00015cf8: b90023e8 str w8, [sp, #32] k: 0x15cfc 0x15da4 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <d8d23>:<d8d06>: l: 0x15cfc 0x15d24 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <d8d40>:<d8d23>:<d8d06>: jkl 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) 0x15cfc 0x15da4 (DW_OP_breg31 0x20) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15cfc 0x15d24 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~jkl 00015cfc: d0000029 adrp x9, 1b000 <hyp_memory+0x460> ~jkl 00015d00: b9479928 ldr w8, [x9, #1944] ~jkl 00015d04: 71000108 subs w8, w8, #0x0 ~jkl 00015d08: 1a9f07ea cset w10, ne // ne = any ~jkl 00015d0c: 381e43aa sturb w10, [x29, #-28] jkl system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~jkl 00015d10: 385e43aa ldurb w10, [x29, #-28] ~jkl 00015d14: 2a0a03e9 mov w9, w10 ~jkl 00015d18: 92400129 and x9, x9, #0x1 jkl system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~jkl 00015d1c: f90017e9 str x9, [sp, #40] jkl system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~jkl 00015d20: f94017e9 ldr x9, [sp, #40] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15cfc 0x15d24 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c jk cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~jk ┌────00015d24: b4000389 cbz x9, 15d94 <stage2_flush_dcache+0xbc> ~jk │ ┌─00015d28: 14000001 b 15d2c <stage2_flush_dcache+0x54> <- 00015d24(b.cc-succ)<fallthrough> │ │ jk │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~jk │ └>00015d2c: b94023e8 ldr w8, [sp, #32] <- 00015d28(b)<stage2_flush_dcache+0x54> ~jk 00015d30: b81f83a8 stur w8, [x29, #-8] m: 0x15d34 0x15d94 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8d6c>:<d8d23>:<d8d06>: jkm __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0x15d34 0x15d94 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~jkm 00015d34: b85f83a8 ldur w8, [x29, #-8] jkm __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~jkm 00015d38: 7100f508 subs w8, w8, #0x3d ~jkm │ ┌──00015d3c: 540000ab b.lt 15d50 <stage2_flush_dcache+0x78> // b.tstop │ │ ~jkm │ │┌─00015d40: 14000001 b 15d44 <stage2_flush_dcache+0x6c> <- 00015d3c(b.cc-succ)<fallthrough> │ ││ ~jkm │ │└>00015d44: 2a1f03e8 mov w8, wzr <- 00015d40(b)<stage2_flush_dcache+0x6c> jkm │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~jkm │ │ 00015d48: 381ff3a8 sturb w8, [x29, #-1] ~jkm │┌┼──00015d4c: 14000013 b 15d98 <stage2_flush_dcache+0xc0> │││ jkm │││ __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)) 0x15d50 0x15d84 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~jkm ││└─>00015d50: b89f83a8 ldursw x8, [x29, #-8] <- 00015d3c(b.cc)<stage2_flush_dcache+0x78> ~jkm ││ 00015d54: d37ced08 lsl x8, x8, #4 ~jkm ││ 00015d58: d0000029 adrp x9, 1b000 <hyp_memory+0x460> ~jkm ││ 00015d5c: 911e8129 add x9, x9, #0x7a0 ~jkm ││ 00015d60: b868692a ldr w10, [x9, x8] ~jkm ││ 00015d64: 7100014a subs w10, w10, #0x0 ~jkm ││ 00015d68: 1a9f07eb cset w11, ne // ne = any ~jkm ││ 00015d6c: 381f43ab sturb w11, [x29, #-12] jkm ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~jkm ││ 00015d70: 385f43ab ldurb w11, [x29, #-12] ~jkm ││ 00015d74: 2a0b03e8 mov w8, w11 ~jkm ││ 00015d78: 92400108 and x8, x8, #0x1 jkm ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~jkm ││ 00015d7c: f81e83a8 stur x8, [x29, #-24] jkm ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~jkm ││ 00015d80: f85e83a8 ldur x8, [x29, #-24] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0x15d50 0x15d84 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c jkm ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~jkm ││ 00015d84: f1000108 subs x8, x8, #0x0 ~jkm ││ 00015d88: 1a9f07eb cset w11, ne // ne = any jkm ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~jkm ││ 00015d8c: 381ff3ab sturb w11, [x29, #-1] ~jkm ││ ┌─00015d90: 14000002 b 15d98 <stage2_flush_dcache+0xc0> -num param int (base type, DW_ATE_signed size:4) 0x15d34 0x15d94 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ││ │ jk ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~jk └┼─┼>00015d94: d4210000 brk #0x800 <- 00015d24(b.cc)<stage2_flush_dcache+0xbc> │ │ n: 0x15d98 0x15d9c (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <d8d6c>:<d8d23>:<d8d06>: jkn │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0x15d98 0x15d9c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c ~jkn └>└>00015d98: 385ff3a8 ldurb w8, [x29, #-1] <- 00015d4c(b)<stage2_flush_dcache+0xc0>,00015d90(b)<stage2_flush_dcache+0xc0> -num param int (base type, DW_ATE_signed size:4) 0x15d98 0x15d9c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c jk cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~jk 00015d9c: 39009fe8 strb w8, [sp, #39] jk cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~jk 00015da0: 39409fe8 ldrb w8, [sp, #39] -num param int (base type, DW_ATE_signed size:4) 0x15cfc 0x15da4 (DW_OP_breg31 0x20) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c j cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~j 00015da4: 39007fe8 strb w8, [sp, #31] j cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~j 00015da8: 39407fe8 ldrb w8, [sp, #31] -num param int (base type, DW_ATE_signed size:4) 0x15cf4 0x15dac (DW_OP_breg31 0x18) cpus_have_const_cap(inlined):stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c stage2_flush_dcache:660.6 (pgtable.c) Sbepe if (║cpus_have_const_cap(ARM64_HAS_STAGE2_FWB)) ~ 00015dac: 71000508 subs w8, w8, #0x1 ~ ┌──00015db0: 54000061 b.ne 15dbc <stage2_flush_dcache+0xe4> // b.any ~ │┌─00015db4: 14000001 b 15db8 <stage2_flush_dcache+0xe0> <- 00015db0(b.cc-succ)<fallthrough> ││ ││ stage2_flush_dcache:661.3 (pgtable.c) Sbepe ║return; ~ ┌┼└>00015db8: 14000005 b 15dcc <stage2_flush_dcache+0xf4> <- 00015db4(b)<stage2_flush_dcache+0xe0> ││ ││ stage2_flush_dcache:663.22 (pgtable.c) Sbepe __flush_dcache_area(║addr, size); ~ │└─>00015dbc: f9400be0 ldr x0, [sp, #16] <- 00015db0(b.cc)<stage2_flush_dcache+0xe4> stage2_flush_dcache:663.28 (pgtable.c) sbepe __flush_dcache_area(addr, ║size); ~ 00015dc0: f94007e1 ldr x1, [sp, #8] stage2_flush_dcache:663.2 (pgtable.c) sbepe ║__flush_dcache_area(addr, size); ~ 00015dc4: 97ffcef9 bl 99a8 <__flush_dcache_area> stage2_flush_dcache:664.1 (pgtable.c) Sbepe ║} ~ │ ┌─00015dc8: 14000001 b 15dcc <stage2_flush_dcache+0xf4> <- 00015dc4(bl-succ)<return> │ │ ~ └>└>00015dcc: a9457bfd ldp x29, x30, [sp, #80] <- 00015db8(b)<stage2_flush_dcache+0xf4>,00015dc8(b)<stage2_flush_dcache+0xf4> ~ 00015dd0: 910183ff add sp, sp, #0x60 00015ce4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015dd4: d65f03c0 ret -addr param pointer(no type) 0x15cd8 0x15dd8 (DW_OP_breg31 0x10) stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c:658 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15cd8 0x15dd8 (DW_OP_breg31 0x8) stage2_flush_dcache:arch/arm64/kvm/hyp/nvhe/../pgtable.c:658 **00015dd8 <stage2_attr_walker>: + stage2_attr_walker params: +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x10) +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x18) +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x1c) +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15dd8 0x15ec8 (DW_OP_breg31 0x28) +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x15dd8 0x15ec8 (DW_OP_breg31 0x24) +arg param const(pointer(no type)) 0x15dd8 0x15ec8 (DW_OP_breg31 0x18) stage2_attr_walker:735.0 (pgtable.c) Sbepe ║{ +addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x10) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 +end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x18) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 +level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x1c) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 +ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15dd8 0x15ec8 (DW_OP_breg31 0x28) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 +flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x15dd8 0x15ec8 (DW_OP_breg31 0x24) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:733 +arg param const(pointer(no type)) 0x15dd8 0x15ec8 (DW_OP_breg31 0x18) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:734 +pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15dd8 0x15ec8 (DW_OP_breg31 0x10) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:736 +data var pointer(struct stage2_attr_data<d70f1>/<e71d6>) 0x15dd8 0x15ec8 (DW_OP_breg31 0x8) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:737 ~ 00015dd8: d10183ff sub sp, sp, #0x60 ~ 00015ddc: a9057bfd stp x29, x30, [sp, #80] 00015dd8 CFA:r31 r29:u r30:u ~ 00015de0: 910143fd add x29, sp, #0x50 ~ 00015de4: f81f03a0 stur x0, [x29, #-16] ~ 00015de8: f81e83a1 stur x1, [x29, #-24] ~ 00015dec: b81e43a2 stur w2, [x29, #-28] ~ 00015df0: f90017e3 str x3, [sp, #40] ~ 00015df4: b90027e4 str w4, [sp, #36] ~ 00015df8: f9000fe5 str x5, [sp, #24] stage2_attr_walker:736.19 (pgtable.c) SbePe kvm_pte_t pte = *║ptep; ~ 00015dfc: f94017e8 ldr x8, [sp, #40] stage2_attr_walker:736.18 (pgtable.c) sbepe kvm_pte_t pte = ║*ptep; ~ 00015e00: f9400108 ldr x8, [x8] stage2_attr_walker:736.12 (pgtable.c) sbepe kvm_pte_t ║pte = *ptep; ~ 00015e04: f9000be8 str x8, [sp, #16] stage2_attr_walker:737.34 (pgtable.c) Sbepe struct stage2_attr_data *data = ║arg; ~ 00015e08: f9400fe8 ldr x8, [sp, #24] stage2_attr_walker:737.27 (pgtable.c) sbepe struct stage2_attr_data *║data = arg; ~ 00015e0c: f90007e8 str x8, [sp, #8] stage2_attr_walker:739.21 (pgtable.c) Sbepe if (!kvm_pte_valid(║pte)) ~ 00015e10: f9400be0 ldr x0, [sp, #16] stage2_attr_walker:739.7 (pgtable.c) sbepe if (!║kvm_pte_valid(pte)) ~ 00015e14: 97fffd2a bl 152bc <kvm_pte_valid> stage2_attr_walker:739.6 (pgtable.c) sbepe if (║!kvm_pte_valid(pte)) ~ ┌──00015e18: 370000a0 tbnz w0, #0, 15e2c <stage2_attr_walker+0x54> <- 00015e14(bl-succ)<return> ~ │┌─00015e1c: 14000001 b 15e20 <stage2_attr_walker+0x48> <- 00015e18(b.cc-succ)<fallthrough> ││ ~ │└>00015e20: 2a1f03e8 mov w8, wzr <- 00015e1c(b)<stage2_attr_walker+0x48> stage2_attr_walker:740.3 (pgtable.c) Sbepe ║return 0; ~ 00015e24: b81fc3a8 stur w8, [x29, #-4] ~ ┌─┼──00015e28: 14000024 b 15eb8 <stage2_attr_walker+0xe0> │ │ │ │ stage2_attr_walker:742.16 (pgtable.c) Sbepe data->level = ║level; ~ │ └─>00015e2c: b85e43a8 ldur w8, [x29, #-28] <- 00015e18(b.cc)<stage2_attr_walker+0x54> stage2_attr_walker:742.2 (pgtable.c) sbepe ║data->level = level; ~ 00015e30: f94007e9 ldr x9, [sp, #8] stage2_attr_walker:742.14 (pgtable.c) sbepe data->level ║= level; ~ 00015e34: b9001928 str w8, [x9, #24] stage2_attr_walker:743.14 (pgtable.c) Sbepe data->pte = ║pte; ~ 00015e38: f9400be9 ldr x9, [sp, #16] stage2_attr_walker:743.2 (pgtable.c) sbepe ║data->pte = pte; ~ 00015e3c: f94007ea ldr x10, [sp, #8] stage2_attr_walker:743.12 (pgtable.c) sbepe data->pte ║= pte; ~ 00015e40: f9000949 str x9, [x10, #16] stage2_attr_walker:744.10 (pgtable.c) Sbepe pte &= ~║data->attr_clr; ~ 00015e44: f94007e9 ldr x9, [sp, #8] stage2_attr_walker:744.16 (pgtable.c) sbepe pte &= ~data->║attr_clr; ~ 00015e48: f9400529 ldr x9, [x9, #8] stage2_attr_walker:744.6 (pgtable.c) sbepe pte ║&= ~data->attr_clr; ~ 00015e4c: f9400bea ldr x10, [sp, #16] ~ 00015e50: 8a290149 bic x9, x10, x9 ~ 00015e54: f9000be9 str x9, [sp, #16] stage2_attr_walker:745.9 (pgtable.c) Sbepe pte |= ║data->attr_set; ~ 00015e58: f94007e9 ldr x9, [sp, #8] stage2_attr_walker:745.15 (pgtable.c) sbepe pte |= data->║attr_set; ~ 00015e5c: f9400129 ldr x9, [x9] stage2_attr_walker:745.6 (pgtable.c) sbepe pte ║|= data->attr_set; ~ 00015e60: f9400bea ldr x10, [sp, #16] ~ 00015e64: aa090149 orr x9, x10, x9 ~ 00015e68: f9000be9 str x9, [sp, #16] stage2_attr_walker:752.6 (pgtable.c) Sbepe if (║data->pte != pte) ~ 00015e6c: f94007e9 ldr x9, [sp, #8] stage2_attr_walker:752.12 (pgtable.c) sbepe if (data->║pte != pte) ~ 00015e70: f9400929 ldr x9, [x9, #16] stage2_attr_walker:752.19 (pgtable.c) sbepe if (data->pte != ║pte) ~ 00015e74: f9400bea ldr x10, [sp, #16] stage2_attr_walker:752.6 (pgtable.c) sbepe if (║data->pte != pte) ~ 00015e78: eb0a0129 subs x9, x9, x10 ~ ┌───┼────00015e7c: 54000180 b.eq 15eac <stage2_attr_walker+0xd4> // b.none │ │ ~ │ │ ┌─00015e80: 14000001 b 15e84 <stage2_attr_walker+0xac> <- 00015e7c(b.cc-succ)<fallthrough> │ │ │ │ │ │ stage2_attr_walker:753.3 (pgtable.c) Sbepe ║WRITE_ONCE(*ptep, pte); ~ │ │┌─└>00015e84: 14000001 b 15e88 <stage2_attr_walker+0xb0> <- 00015e80(b)<stage2_attr_walker+0xac> │ ││ │ ││ stage2_attr_walker:753.3 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte); ~ │ ┌┼└──>00015e88: 14000001 b 15e8c <stage2_attr_walker+0xb4> <- 00015e84(b)<stage2_attr_walker+0xb0> │ ││ │ ││ stage2_attr_walker:753.3 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte); ~ │┌─└┼───>00015e8c: 14000001 b 15e90 <stage2_attr_walker+0xb8> <- 00015e88(b)<stage2_attr_walker+0xb4> ││ │ ││ │ stage2_attr_walker:753.3 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte); ~ ┌┼└──┼───>00015e90: 14000001 b 15e94 <stage2_attr_walker+0xbc> <- 00015e8c(b)<stage2_attr_walker+0xb8> ││ │ ││ │ stage2_attr_walker:753.3 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte); ~ └┼───┼───>00015e94: f9400be8 ldr x8, [sp, #16] <- 00015e90(b)<stage2_attr_walker+0xbc> ~ │ │ 00015e98: f94017e9 ldr x9, [sp, #40] ~ │ │ 00015e9c: f9000128 str x8, [x9] ~ │ │ ┌─00015ea0: 14000001 b 15ea4 <stage2_attr_walker+0xcc> │ │ │ │ │ │ stage2_attr_walker:753.3 (pgtable.c) sbepe ║WRITE_ONCE(*ptep, pte); ~ │ │┌─└>00015ea4: 14000001 b 15ea8 <stage2_attr_walker+0xd0> <- 00015ea0(b)<stage2_attr_walker+0xcc> │ ││ ~ │ ┌┼└──>00015ea8: 14000001 b 15eac <stage2_attr_walker+0xd4> <- 00015ea4(b)<stage2_attr_walker+0xd0> │ ││ ~ └─>└┼───>00015eac: 2a1f03e8 mov w8, wzr <- 00015e7c(b.cc)<stage2_attr_walker+0xd4>,00015ea8(b)<stage2_attr_walker+0xd4> stage2_attr_walker:755.2 (pgtable.c) Sbepe ║return 0; ~ 00015eb0: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌─00015eb4: 14000001 b 15eb8 <stage2_attr_walker+0xe0> │ │ │ │ stage2_attr_walker:756.1 (pgtable.c) Sbepe ║} ~ └─>└>00015eb8: b85fc3a0 ldur w0, [x29, #-4] <- 00015e28(b)<stage2_attr_walker+0xe0>,00015eb4(b)<stage2_attr_walker+0xe0> ~ 00015ebc: a9457bfd ldp x29, x30, [sp, #80] ~ 00015ec0: 910183ff add sp, sp, #0x60 00015de4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015ec4: d65f03c0 ret -addr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x10) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 -end param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x18) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 -level param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0x15dd8 0x15ec8 (DW_OP_fbreg -0x1c) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 -ptep param pointer(typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))))) 0x15dd8 0x15ec8 (DW_OP_breg31 0x28) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:732 -flag param enum kvm_pgtable_walk_flags<d70f1>/<d73e4> 0x15dd8 0x15ec8 (DW_OP_breg31 0x24) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:733 -arg param const(pointer(no type)) 0x15dd8 0x15ec8 (DW_OP_breg31 0x18) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:734 -pte var typedef(kvm_pte_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15dd8 0x15ec8 (DW_OP_breg31 0x10) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:736 -data var pointer(struct stage2_attr_data<d70f1>/<e71d6>) 0x15dd8 0x15ec8 (DW_OP_breg31 0x8) stage2_attr_walker:arch/arm64/kvm/hyp/nvhe/../pgtable.c:737 **00015ec8 <cpus_have_cap>: + cpus_have_cap params: +num param unsigned int (base type, DW_ATE_unsigned size:4) 0x15ec8 0x15f24 (DW_OP_breg31 0x8) cpus_have_cap:428.0 (cpufeature.h) Sbepe ║{ +num param unsigned int (base type, DW_ATE_unsigned size:4) 0x15ec8 0x15f24 (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:427 ~ 00015ec8: d10083ff sub sp, sp, #0x20 ~ 00015ecc: a9017bfd stp x29, x30, [sp, #16] 00015ec8 CFA:r31 r29:u r30:u ~ 00015ed0: 910043fd add x29, sp, #0x10 ~ 00015ed4: b9000be0 str w0, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) SbePe if (║num >= ARM64_NCAPS) ~ 00015ed8: b9400be8 ldr w8, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~ 00015edc: 7100f508 subs w8, w8, #0x3d ~ ┌──00015ee0: 540000a3 b.cc 15ef4 <cpus_have_cap+0x2c> // b.lo, b.ul, b.last ~ │┌─00015ee4: 14000001 b 15ee8 <cpus_have_cap+0x20> <- 00015ee0(b.cc-succ)<fallthrough> ││ ~ │└>00015ee8: 2a1f03e8 mov w8, wzr <- 00015ee4(b)<cpus_have_cap+0x20> cpus_have_cap:430.3 (cpufeature.h) Sbepe ║return false; ~ 00015eec: 381ff3a8 sturb w8, [x29, #-1] ~ ┌┼──00015ef0: 14000009 b 15f14 <cpus_have_cap+0x4c> ││ ││ cpus_have_cap:431.18 (cpufeature.h) Sbepe return test_bit(║num, cpu_hwcaps); ~ │└─>00015ef4: b9400be0 ldr w0, [sp, #8] <- 00015ee0(b.cc)<cpus_have_cap+0x2c> cpus_have_cap:431.9 (cpufeature.h) sbepe return ║test_bit(num, cpu_hwcaps); ~ 00015ef8: d0000021 adrp x1, 1b000 <hyp_memory+0x460> ~ 00015efc: 91218021 add x1, x1, #0x860 ~ 00015f00: 94000009 bl 15f24 <test_bit> ~ 00015f04: 71000008 subs w8, w0, #0x0 <- 00015f00(bl-succ)<return> ~ 00015f08: 1a9f07e9 cset w9, ne // ne = any cpus_have_cap:431.2 (cpufeature.h) sbepe ║return test_bit(num, cpu_hwcaps); ~ 00015f0c: 381ff3a9 sturb w9, [x29, #-1] ~ │ ┌─00015f10: 14000001 b 15f14 <cpus_have_cap+0x4c> │ │ │ │ cpus_have_cap:432.1 (cpufeature.h) Sbepe ║} ~ └>└>00015f14: 385ff3a0 ldurb w0, [x29, #-1] <- 00015ef0(b)<cpus_have_cap+0x4c>,00015f10(b)<cpus_have_cap+0x4c> ~ 00015f18: a9417bfd ldp x29, x30, [sp, #16] ~ 00015f1c: 910083ff add sp, sp, #0x20 00015ed4 CFA:r29+16 r29:c-16 r30:c-8 ~ 00015f20: d65f03c0 ret -num param unsigned int (base type, DW_ATE_unsigned size:4) 0x15ec8 0x15f24 (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/../pgtable.c:427 **00015f24 <test_bit>: + test_bit params: +nr param int (base type, DW_ATE_signed size:4) 0x15f24 0x15f64 (DW_OP_fbreg 0xc) +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15f24 0x15f64 (DW_OP_fbreg 0x0) test_bit:105.0 (non-atomic.h) Sbepe ║{ 00015f24 CFA:r31 +nr param int (base type, DW_ATE_signed size:4) 0x15f24 0x15f64 (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:104 +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15f24 0x15f64 (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:104 ~ 00015f24: d10043ff sub sp, sp, #0x10 <- 00015f00(bl)<test_bit> ~ 00015f28: b9000fe0 str w0, [sp, #12] ~ 00015f2c: f90003e1 str x1, [sp] test_bit:106.16 (non-atomic.h) SbePe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 00015f30: f94003e8 ldr x8, [sp] test_bit:106.21 (non-atomic.h) sbepe return 1UL & (addr[║BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 00015f34: b9400fe9 ldr w9, [sp, #12] ~ 00015f38: 1100fd2a add w10, w9, #0x3f ~ 00015f3c: 7100012b subs w11, w9, #0x0 ~ 00015f40: 1a89b149 csel w9, w10, w9, lt // lt = tstop ~ 00015f44: 13067d29 asr w9, w9, #6 test_bit:106.16 (non-atomic.h) sbepe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 00015f48: 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))); ~ 00015f4c: b9400fe9 ldr w9, [sp, #12] ~ 00015f50: 2a0903ec mov w12, w9 test_bit:106.35 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] ║>> (nr & (BITS_PER_LONG-1))); ~ 00015f54: 9acc2508 lsr x8, x8, x12 test_bit:106.13 (non-atomic.h) sbepe return 1UL ║& (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 00015f58: 12000100 and w0, w8, #0x1 test_bit:106.2 (non-atomic.h) sbepe ║return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 00015f5c: 910043ff add sp, sp, #0x10 00015f28 CFA:r31+16 ~ 00015f60: d65f03c0 ret -nr param int (base type, DW_ATE_signed size:4) 0x15f24 0x15f64 (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:104 -addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0x15f24 0x15f64 (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/../pgtable.c:104