* [Qemu-devel] When the tlb_fill will be called from generated code?
@ 2011-09-27 4:15 陳韋任
2011-09-27 7:06 ` Jan Kiszka
0 siblings, 1 reply; 10+ messages in thread
From: 陳韋任 @ 2011-09-27 4:15 UTC (permalink / raw)
To: qemu-devel
Hi, all
The comment above tlb_fill says:
/* try to fill the TLB and return an exception if error. If retaddr is
NULL, it means that the function was called in C code (i.e. not
from generated code or from helper.c) */
I see tlb_fill only be called from softmmu_template.h (i.e., C code). I
am wondering when/where the tlb_fill is called from generated code (code
cache) or from helper.c.
Thanks!
Regards,
chenwj
--
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 4:15 [Qemu-devel] When the tlb_fill will be called from generated code? 陳韋任 @ 2011-09-27 7:06 ` Jan Kiszka 2011-09-27 11:02 ` 陳韋任 0 siblings, 1 reply; 10+ messages in thread From: Jan Kiszka @ 2011-09-27 7:06 UTC (permalink / raw) To: 陳韋任; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 689 bytes --] On 2011-09-27 06:15, 陳韋任 wrote: > Hi, all > > The comment above tlb_fill says: > > /* try to fill the TLB and return an exception if error. If retaddr is > NULL, it means that the function was called in C code (i.e. not > from generated code or from helper.c) */ > > I see tlb_fill only be called from softmmu_template.h (i.e., C code). I > am wondering when/where the tlb_fill is called from generated code (code > cache) or from helper.c. > You can find the answer yourself: Load qemu into gdb, set a breakpoint on that function and let it run. If you want to catch only the retaddr == NULL case, make the breakpoint conditional. Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 7:06 ` Jan Kiszka @ 2011-09-27 11:02 ` 陳韋任 2011-09-27 11:29 ` Max Filippov 2011-09-27 17:10 ` Blue Swirl 0 siblings, 2 replies; 10+ messages in thread From: 陳韋任 @ 2011-09-27 11:02 UTC (permalink / raw) To: Jan Kiszka; +Cc: qemu-devel, 陳韋任 Hi, Jan > You can find the answer yourself: Load qemu into gdb, set a breakpoint > on that function and let it run. If you want to catch only the retaddr > == NULL case, make the breakpoint conditional. Thanks for your tip. I see when retaddr != NULL, then the calling sequence of tlb_fill might be something like (take i386 guest for example): - __stl_mmu/__ldl_mmu -> tlb_fill - helper_ljmp_protected -> load_segment -> ldl_kernel -> __ldl_mmu I am not sure when/where __stl_mmu/__ldl_mmu are used. I do set breakpoint on __stl_mmu/__ldl_mmu, but the backtrace can only show something like, #0 __stl_mmu (addr=196608, val=0, mmu_idx=0) at /tmp/chenwj/temp/qemu-0.13.0/softmmu_template.h:228 #1 0x00000000400028e1 in ?? () #2 0x00000000000000b4 in ?? () #3 0xecc68ff412fa4137 in ?? () #4 0x0000000000000000 in ?? () When retaddr == NULL, then the calling sequence of tlb_fill is, tb_find_slow -> get_page_addr_code -> ldub_code -> __ldb_cmmu I can only guest the b in __ldb_cmmu means load byte, but I can't figure out what's the difference between _cmmu and _mmu. Could you give me some hint? Thanks! Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 11:02 ` 陳韋任 @ 2011-09-27 11:29 ` Max Filippov 2011-09-28 3:51 ` 陳韋任 2011-09-27 17:10 ` Blue Swirl 1 sibling, 1 reply; 10+ messages in thread From: Max Filippov @ 2011-09-27 11:29 UTC (permalink / raw) To: 陳韋任; +Cc: Jan Kiszka, qemu-devel > I am not sure when/where __stl_mmu/__ldl_mmu are used. I do set They are called from the places in TBs where tcg_gen_qemu_{ld,st}{8,16,32,64}{u,s} were injected. > breakpoint on __stl_mmu/__ldl_mmu, but the backtrace can only show > something like, > > #0 __stl_mmu (addr=196608, val=0, mmu_idx=0) at /tmp/chenwj/temp/qemu-0.13.0/softmmu_template.h:228 > #1 0x00000000400028e1 in ?? () > #2 0x00000000000000b4 in ?? () > #3 0xecc68ff412fa4137 in ?? () > #4 0x0000000000000000 in ?? () > > When retaddr == NULL, then the calling sequence of tlb_fill is, > > tb_find_slow -> get_page_addr_code -> ldub_code -> __ldb_cmmu > > I can only guest the b in __ldb_cmmu means load byte, but I can't > figure out what's the difference between _cmmu and _mmu. Could you > give me some hint? Thanks! _cmmu is used to access code, _mmu is for data. -- Thanks. -- Max ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 11:29 ` Max Filippov @ 2011-09-28 3:51 ` 陳韋任 2011-09-28 6:36 ` Max Filippov 2011-09-29 3:40 ` Mulyadi Santosa 0 siblings, 2 replies; 10+ messages in thread From: 陳韋任 @ 2011-09-28 3:51 UTC (permalink / raw) To: Max Filippov; +Cc: Jan Kiszka, qemu-devel, 陳韋任 > > I am not sure when/where __stl_mmu/__ldl_mmu are used. I do set > > They are called from the places in TBs where > tcg_gen_qemu_{ld,st}{8,16,32,64}{u,s} were injected. So you mean __stl_mmu/__ldl_mmu are called from the code cache. > > breakpoint on __stl_mmu/__ldl_mmu, but the backtrace can only show > > something like, > > > > #0 鍮_stl_mmu (addr=196608, val=0, mmu_idx=0) at /tmp/chenwj/temp/qemu-0.13.0/softmmu_template.h:228 > > #1 ?0x00000000400028e1 in ?? () > > #2 ?0x00000000000000b4 in ?? () > > #3 ?0xecc68ff412fa4137 in ?? () > > #4 ?0x0000000000000000 in ?? () Does those ?? mean since we are in the code cache, so GDB cannot show their backtarce? > > When retaddr == NULL, then the calling sequence of tlb_fill is, > > > > 慯b_find_slow -> get_page_addr_code -> ldub_code -> __ldb_cmmu > > > > I can only guest the b in __ldb_cmmu means load byte, but I can't > > figure out what's the difference between _cmmu and _mmu. Could you > > give me some hint? Thanks! > > _cmmu is used to access code, _mmu is for data. I see. Thanks, and I find building QEMU with --extra-cflags="-save-temps" is really help. Those *.i files make things much clear. Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-28 3:51 ` 陳韋任 @ 2011-09-28 6:36 ` Max Filippov 2011-09-29 3:40 ` Mulyadi Santosa 1 sibling, 0 replies; 10+ messages in thread From: Max Filippov @ 2011-09-28 6:36 UTC (permalink / raw) To: 陳韋任; +Cc: Jan Kiszka, qemu-devel > > They are called from the places in TBs where > > tcg_gen_qemu_{ld,st}{8,16,32,64}{u,s} were injected. > > So you mean __stl_mmu/__ldl_mmu are called from the code cache. > > > > breakpoint on __stl_mmu/__ldl_mmu, but the backtrace can only show > > > something like, > > > > > > #0 鍮_stl_mmu (addr=196608, val=0, mmu_idx=0) at /tmp/chenwj/temp/qemu-0.13.0/softmmu_template.h:228 > > > #1 ?0x00000000400028e1 in ?? () > > > #2 ?0x00000000000000b4 in ?? () > > > #3 ?0xecc68ff412fa4137 in ?? () > > > #4 ?0x0000000000000000 in ?? () > > Does those ?? mean since we are in the code cache, so GDB cannot > show their backtarce? Yes, at least for the frame #1. Addresses in frames #2-#4 don't look right, probably because #1 does not have a stack frame. Thanks. -- Max ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-28 3:51 ` 陳韋任 2011-09-28 6:36 ` Max Filippov @ 2011-09-29 3:40 ` Mulyadi Santosa 2011-09-29 3:45 ` 陳韋任 1 sibling, 1 reply; 10+ messages in thread From: Mulyadi Santosa @ 2011-09-29 3:40 UTC (permalink / raw) To: 陳韋任; +Cc: qemu-devel Hi :) 2011/9/28 陳韋任 <chenwj@iis.sinica.edu.tw>: > I see. Thanks, and I find building QEMU with --extra-cflags="-save-temps" > is really help. Those *.i files make things much clear. glad that my -save-temps suggestion helps other ;) -- regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-29 3:40 ` Mulyadi Santosa @ 2011-09-29 3:45 ` 陳韋任 0 siblings, 0 replies; 10+ messages in thread From: 陳韋任 @ 2011-09-29 3:45 UTC (permalink / raw) To: Mulyadi Santosa; +Cc: qemu-devel, 陳韋任 > glad that my -save-temps suggestion helps other ;) Indeed. Thanks again, Mulyadi. Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 11:02 ` 陳韋任 2011-09-27 11:29 ` Max Filippov @ 2011-09-27 17:10 ` Blue Swirl 2011-09-28 2:32 ` 陳韋任 1 sibling, 1 reply; 10+ messages in thread From: Blue Swirl @ 2011-09-27 17:10 UTC (permalink / raw) To: 陳韋任; +Cc: Jan Kiszka, qemu-devel On Tue, Sep 27, 2011 at 11:02 AM, 陳韋任 <chenwj@iis.sinica.edu.tw> wrote: > Hi, Jan > >> You can find the answer yourself: Load qemu into gdb, set a breakpoint >> on that function and let it run. If you want to catch only the retaddr >> == NULL case, make the breakpoint conditional. > > Thanks for your tip. I see when retaddr != NULL, then the calling > sequence of tlb_fill might be something like (take i386 guest for > example): > > - __stl_mmu/__ldl_mmu -> tlb_fill > > - helper_ljmp_protected -> load_segment -> ldl_kernel -> __ldl_mmu > > I am not sure when/where __stl_mmu/__ldl_mmu are used. I do set > breakpoint on __stl_mmu/__ldl_mmu, but the backtrace can only show > something like, > > #0 __stl_mmu (addr=196608, val=0, mmu_idx=0) at /tmp/chenwj/temp/qemu-0.13.0/softmmu_template.h:228 > #1 0x00000000400028e1 in ?? () > #2 0x00000000000000b4 in ?? () > #3 0xecc68ff412fa4137 in ?? () > #4 0x0000000000000000 in ?? () > > When retaddr == NULL, then the calling sequence of tlb_fill is, > > tb_find_slow -> get_page_addr_code -> ldub_code -> __ldb_cmmu > > I can only guest the b in __ldb_cmmu means load byte, but I can't > figure out what's the difference between _cmmu and _mmu. Could you > give me some hint? Thanks! End of exec.c instantiates the code load functions (ld*_code), there GETPC is defined as NULL. Otherwise GETPC works as usual, so it will not return NULL. The memory access templates are a bit confusing. Op helpers use softmmu_exec.h to instantiate {ld,st}*_{kernel,user,etc} functions. TCG needs __{ld,st}* helpers for qemu_{ld,st}* TLB miss case, these are generated by softmmu_template.h. I'll soon apply a patch which adds comments to the files. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [Qemu-devel] When the tlb_fill will be called from generated code? 2011-09-27 17:10 ` Blue Swirl @ 2011-09-28 2:32 ` 陳韋任 0 siblings, 0 replies; 10+ messages in thread From: 陳韋任 @ 2011-09-28 2:32 UTC (permalink / raw) To: Blue Swirl; +Cc: Jan Kiszka, qemu-devel, 陳韋任 > End of exec.c instantiates the code load functions (ld*_code), there > GETPC is defined as NULL. Otherwise GETPC works as usual, so it will > not return NULL. > > The memory access templates are a bit confusing. Op helpers use > softmmu_exec.h to instantiate {ld,st}*_{kernel,user,etc} functions. > TCG needs __{ld,st}* helpers for qemu_{ld,st}* TLB miss case, these > are generated by softmmu_template.h. I'll soon apply a patch which > adds comments to the files. Thanks. I am very appreciate it. :-) Regards, chenwj -- Wei-Ren Chen (陳韋任) Computer Systems Lab, Institute of Information Science, Academia Sinica, Taiwan (R.O.C.) Tel:886-2-2788-3799 #1667 ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2011-09-29 3:45 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-27 4:15 [Qemu-devel] When the tlb_fill will be called from generated code? 陳韋任 2011-09-27 7:06 ` Jan Kiszka 2011-09-27 11:02 ` 陳韋任 2011-09-27 11:29 ` Max Filippov 2011-09-28 3:51 ` 陳韋任 2011-09-28 6:36 ` Max Filippov 2011-09-29 3:40 ` Mulyadi Santosa 2011-09-29 3:45 ` 陳韋任 2011-09-27 17:10 ` Blue Swirl 2011-09-28 2:32 ` 陳韋任
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.