qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Question about io_writex()


From: Eva Chen
Subject: [Qemu-devel] Question about io_writex()
Date: Tue, 15 May 2018 09:26:19 +0800

Hello,

I want to know the flow of how devices read/write function be called by
code_gen_buffer().
Take pl110_write() for example, I set a breakpoint in  pl110_write(), and
the backtrace shows bellow.

(gdb)
#0 * pl110_write* (opaque=0x555556e8f3f0, offset=28, val=0, size=4) at
hw/display/pl110.c:378
#1  0x00005555557e398b in memory_region_write_accessor (mr=0x555556e8f6f0,
addr=28, value=<optimized out>, size=4, shift=<optimized out>,
mask=<optimized out>,
    attrs=...) at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/memory.c:529
#2  0x00005555557e031b in access_with_adjusted_size (address@hidden,
address@hidden, address@hidden,
access_size_min=<optimized out>,
    access_size_max=<optimized out>, address@hidden
<memory_region_write_accessor>, address@hidden,
address@hidden)
    at /home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/memory.c:595
#3  0x00005555557e4d0b in memory_region_dispatch_write (mr=<optimized out>,
addr=28, address@hidden, address@hidden, attrs=...)
    at /home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/memory.c:1337
#4  0x0000555555776eae in* io_writex* (env=0x5555568294f0,
iotlbentry=0x555556839a18, val=0, addr=3498860572, retaddr=<optimized out>,
size=4)
    at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/accel/tcg/cputlb.c:798
#5  0x00007fffe95609fc in code_gen_buffer ()
#6  0x00005555557fe0d5 in cpu_tb_exec (itb=<optimized out>, itb=<optimized
out>, cpu=0x7fffe95608c0 <code_gen_buffer+9767062>)
    at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/accel/tcg/cpu-exec.c:166
#7  cpu_loop_exec_tb (tb_exit=<synthetic pointer>, last_tb=<synthetic
pointer>, tb=<optimized out>, cpu=0x7fffe95608c0 <code_gen_buffer+9767062>)
    at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/accel/tcg/cpu-exec.c:578
#8  cpu_exec (address@hidden) at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/accel/tcg/cpu-exec.c:676
#9  0x00005555557cf527 in tcg_cpu_exec (cpu=0x555556821260) at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/cpus.c:1270
#10 qemu_tcg_cpu_thread_fn (arg=0x555556821260) at
/home/jerry/qemu_new-2.10.0-rc4/qemu-2.10.0-rc4/cpus.c:1473
#11 0x00007ffff46b0184 in start_thread (arg=0x7fffe821c700) at
pthread_create.c:312
#12 0x00007ffff43dcffd in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:111

This backtrace shows that pl110_write() is called by io_wrtex(), but I
can't find who call the io_writex().
code_gen_buffer() is the part that QEMU execute the TB, I think maybe
io_writex() is called by the helper function but I only find io_writex() in
softmmu_template.h (*static inline void glue(io_write, SUFFIX)), *which is
not related to the helper function.
Could I bother you to explain more about how io_writex() to be called and
any method that recommended for others that want to trace the flow of
device read/write()?

I will be grateful for any advice, thanks.


Sincerely,
Eva


reply via email to

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