[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: What does soft-mmu mean? What happens when we set MMU registers? (aa
From: |
Peter Maydell |
Subject: |
Re: What does soft-mmu mean? What happens when we set MMU registers? (aarch64) |
Date: |
Wed, 10 Mar 2021 11:07:24 +0000 |
On Wed, 10 Mar 2021 at 08:31, <ckim@etri.re.kr> wrote:
>
> Hello, Peter Maydell,
>
> I've added print in get_phys_addr at the entrance
> 'printf("address = %llx\n", address);'
> And found actualy it's called not that many times. (3 or 4 times before this
> thing happens)
> Right after I set sctlr_el3 register, this get_phys_addr is again called. And
> I get
> Address = 28c.
> But when I see the objdump code, it is like
>
> 1027c: d53ec002 mrs x2, vbar_el3
> 10280: d5380702 mrs x2, id_aa64mmfr0_el1
> 10284: d53e2042 mrs x2, tcr_el3
> 10288: d51e1000 msr sctlr_el3, x0 <=== trap seems to happen here
> 1028c: d51c1000 msr sctlr_el2, x0 <=== accessing virtual address
> 28c, not 1028c.
> 10290: d5181000 msr sctlr_el1, x0
> 10294: d5034fff msr daifclr, #0xf
> 10298: d53e1100 mrs x0, scr_el3
> 1029c: b27e0000 orr x0, x0, #0x4
>
> The next command (msr sctlr_el2, x0) is at 0x1028c, but the get_phy_addr
> function was called with virtual address 0x28c. Is this normal? I don't know
> why there is this difference of 0x10000.(0x10000 is the start address of page
> table)
You can see from your previous trace that you are executing
from 0x28x, not 0x1028x. Your code was probably linked to
load at 0x10000, which is why objdump output looks like that,
but you have told QEMU to load it at 0x0, which is what is
actually happening at runtime.
thanks
-- PMM