qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC PATCH v2 03/16] exec: add debug version of physica


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [RFC PATCH v2 03/16] exec: add debug version of physical memory read and write apis
Date: Thu, 22 Sep 2016 17:21:13 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0


On 22/09/2016 16:52, Brijesh Singh wrote:
> The patch adds the following new APIs:
> - cpu_physical_memory_read_debug
> - cpu_physical_memory_write_debug
> - cpu_physical_memory_rw_debug
> - ldl_phys_debug
> - ldq_phys_debug
> 
> The idea behind this patch is that if all the qemu monitor memory dumps
> and gdbserver accesses are done through these common APIs then in future
> we can define some kind of global debug policy to control debug behavior.
> 
> Signed-off-by: Brijesh Singh <address@hidden>

Reviewed-by: Paolo Bonzini <address@hidden>

> ---
>  exec.c                    |   32 ++++++++++++++++++++++++++++++++
>  include/exec/cpu-common.h |   15 +++++++++++++++
>  2 files changed, 47 insertions(+)
> 
> diff --git a/exec.c b/exec.c
> index 0989933..9d0128e 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -3105,6 +3105,30 @@ uint32_t ldl_phys(AddressSpace *as, hwaddr addr)
>      return address_space_ldl(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
>  }
>  
> +uint32_t ldl_phys_debug(CPUState *cpu, hwaddr addr)
> +{
> +    MemTxAttrs attrs = MEMTXATTRS_DEBUG;
> +    int asidx = cpu_asidx_from_attrs(cpu, attrs);
> +    uint32_t val;
> +
> +    cpu_physical_memory_rw_debug_internal(cpu->cpu_ases[asidx].as,
> +                                          addr, (void *) &val,
> +                                          4, attrs, READ_DATA);
> +    return tswap32(val);
> +}
> +
> +uint64_t ldq_phys_debug(CPUState *cpu, hwaddr addr)
> +{
> +    MemTxAttrs attrs = MEMTXATTRS_DEBUG;
> +    int asidx = cpu_asidx_from_attrs(cpu, attrs);
> +    uint64_t val;
> +
> +    cpu_physical_memory_rw_debug_internal(cpu->cpu_ases[asidx].as,
> +                                          addr, (void *) &val,
> +                                          8, attrs, READ_DATA);
> +    return val;
> +}
> +
>  uint32_t ldl_le_phys(AddressSpace *as, hwaddr addr)
>  {
>      return address_space_ldl_le(as, addr, MEMTXATTRS_UNSPECIFIED, NULL);
> @@ -3615,6 +3639,14 @@ void stq_be_phys(AddressSpace *as, hwaddr addr, 
> uint64_t val)
>      address_space_stq_be(as, addr, val, MEMTXATTRS_UNSPECIFIED, NULL);
>  }
>  
> +void cpu_physical_memory_rw_debug(hwaddr addr, uint8_t *buf,
> +                                  int len, int is_write)
> +{
> +    cpu_physical_memory_rw_debug_internal(&address_space_memory, addr,
> +                                          buf, len, MEMTXATTRS_DEBUG,
> +                                          is_write ? WRITE_DATA : READ_DATA);
> +}
> +
>  /* virtual memory access for debug (includes writing to ROM) */
>  int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
>                          uint8_t *buf, int len, int is_write)
> diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
> index 520dae0..90598d4 100644
> --- a/include/exec/cpu-common.h
> +++ b/include/exec/cpu-common.h
> @@ -61,6 +61,8 @@ const char *qemu_ram_get_idstr(RAMBlock *rb);
>  
>  void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
>                              int len, int is_write);
> +void cpu_physical_memory_rw_debug(hwaddr addr, uint8_t *buf,
> +                                  int len, int is_write);
>  static inline void cpu_physical_memory_read(hwaddr addr,
>                                              void *buf, int len)
>  {
> @@ -71,6 +73,19 @@ static inline void cpu_physical_memory_write(hwaddr addr,
>  {
>      cpu_physical_memory_rw(addr, (void *)buf, len, 1);
>  }
> +static inline void cpu_physical_memory_read_debug(hwaddr addr,
> +                                                  void *buf, int len)
> +{
> +    cpu_physical_memory_rw_debug(addr, buf, len, 0);
> +}
> +static inline void cpu_physical_memory_write_debug(hwaddr addr,
> +                                                   const void *buf, int len)
> +{
> +    cpu_physical_memory_rw_debug(addr, (void *)buf, len, 1);
> +}
> +uint32_t ldl_phys_debug(CPUState *cpu, hwaddr addr);
> +uint64_t ldq_phys_debug(CPUState *cpu, hwaddr addr);
> +
>  void *cpu_physical_memory_map(hwaddr addr,
>                                hwaddr *plen,
>                                int is_write);
> 



reply via email to

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