qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] On x86 MMU modes


From: Sandhya Kumar
Subject: Re: [Qemu-devel] On x86 MMU modes
Date: Mon, 8 Jun 2015 10:51:51 +0800

Thanks Peter for your response. I notice that tlb_fill()  is happening only in softmmu_template.h and not anywhere else in code base. This means I should expect the TLB itself to be populated here for other code loads to have successful look up later. Am I wrong with my understanding?

Even I guessed TLB to be fetching basic block (i.e. chunk of code with single entry and exit), but realized its not and hence I posted the question here. If we look at the sequence mentioned earlier in thread (i.e. 401bee , 401c07, 401c0e, 401c13)
401c07 and 401c0e forms a pattern - it is from the immediate value after "mov" opcode, modRM bytes in lines 10, 11. I also checked other "mov" lines. This pattern appears to match everywhere expect for the "mov" in line 9 .

Let me know if you need more information.

[My executable]

0000000000401bee <_start>:
  401bee:       31 ed                   xor    %ebp,%ebp
  401bf0:       49 89 d1                mov    %rdx,%r9
  401bf3:       5e                      pop    %rsi
  401bf4:       48 89 e2                mov    %rsp,%rdx
  401bf7:       48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
  401bfb:       50                      push   %rax
  401bfc:       54                      push   %rsp
  401bfd:       49 c7 c0 20 24 40 00    mov    $0x402420,%r8                 // [Line 9]
  401c04:       48 c7 c1 90 23 40 00    mov    $0x402390,%rcx               // [Line 10]
  401c0b:       48 c7 c7 fe 1c 40 00    mov    $0x401cfe,%rdi                  // [Line 11]
  401c12:       e8 09 01 00 00          callq  401d20 <__libc_start_main>
  401c17:       f4                      hlt    
  401c18:       0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
  401c1f:       00



On Sun, Jun 7, 2015 at 6:34 AM, Peter Maydell <address@hidden> wrote:
On 6 June 2015 at 08:36, Sandhya Kumar <address@hidden> wrote:
> Thanks Peter for your explanation.
>
> [The following question on TLB working could be a deviation from the first
> mail here, but asking here instead of starting new thread.]
>
> I picked up a simple 'Hello world' ELF executable (shown at the end) and
> tried to experiment with QEMU's address translations (i.e. guest VA -> host
> VA in softmmu_template.h) occurring in userland for that process. This is
> the sequence of guest VA (in hexadecimal) being translated:
>
> 401bee
> 401c07
> 401c0e
> 401c13
> 401d23
> 401d39
> 402009
> ...... and so on
>
> The italized ones (first four) belong to _start of my executable and the
> next few can be traced to __libc_start_main in my executable. Can anyone
> please help me understand why the order is appearing like this?

Most code loads don't go through the softmmu_template.h code. The
frontend (target-*/translate.c) calls cpu_ld*_code functions, which
are implemented by macros in include/exec/cpu_ldst_template.h. Those
functions will try to do a direct lookup in QEMU's TLB first, and will
only call the helper functions in softmmu_template.h if they miss.
So you're not going to see a call for every instruction. (My guess is
you're seeing one call every basic block, but it's not possible to tell
from the detail you give.)

-- PMM


reply via email to

[Prev in Thread] Current Thread [Next in Thread]