* [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c
@ 2025-12-24 13:39 Philippe Mathieu-Daudé
2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé
` (5 more replies)
0 siblings, 6 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw)
To: qemu-devel
Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier,
Anton Johansson, Philippe Mathieu-Daudé
Requiered for single-binary work, remove target-specific
parts of hmp-cmds-target.c, eventually allowing to merge
within hmp-cmds.c.
tag: https://gitlab.com/philmd/qemu/-/tags/endian_hmp-v1
CI: https://gitlab.com/philmd/qemu/-/pipelines/2231223066
Philippe Mathieu-Daudé (6):
monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa()
monitor/hmp: Use plain uint64_t @addr argument in memory_dump()
monitor/hmp: Remove target_long uses in memory_dump()
monitor/hmp: Inline ld[uw,l,q]_p() calls in memory_dump()
monitor/hmp: Fix coding style in hmp-cmds-target.c
monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c
monitor/hmp-cmds-target.c | 381 --------------------------------------
monitor/hmp-cmds.c | 354 +++++++++++++++++++++++++++++++++++
monitor/meson.build | 2 +-
3 files changed, 355 insertions(+), 382 deletions(-)
delete mode 100644 monitor/hmp-cmds-target.c
--
2.52.0
^ permalink raw reply [flat|nested] 18+ messages in thread* [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:17 ` Manos Pitsidianakis 2025-12-25 0:09 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() Philippe Mathieu-Daudé ` (4 subsequent siblings) 5 siblings, 2 replies; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé cpu_get_phys_page_debug() takes a vaddr type since commit 00b941e581b ("cpu: Turn cpu_get_phys_page_debug() into a CPUClass hook"). Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index e9820611466..2976f986d35 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -301,7 +301,7 @@ void hmp_gpa2hva(Monitor *mon, const QDict *qdict) void hmp_gva2gpa(Monitor *mon, const QDict *qdict) { - target_ulong addr = qdict_get_int(qdict, "addr"); + vaddr addr = qdict_get_int(qdict, "addr"); CPUState *cs = mon_get_cpu(mon); hwaddr gpa; -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() 2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé @ 2025-12-24 14:17 ` Manos Pitsidianakis 2025-12-25 0:09 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:17 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > cpu_get_phys_page_debug() takes a vaddr type since commit > 00b941e581b ("cpu: Turn cpu_get_phys_page_debug() into a CPUClass > hook"). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > monitor/hmp-cmds-target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index e9820611466..2976f986d35 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -301,7 +301,7 @@ void hmp_gpa2hva(Monitor *mon, const QDict *qdict) > > void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > { > - target_ulong addr = qdict_get_int(qdict, "addr"); > + vaddr addr = qdict_get_int(qdict, "addr"); > CPUState *cs = mon_get_cpu(mon); > hwaddr gpa; > > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() 2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé 2025-12-24 14:17 ` Manos Pitsidianakis @ 2025-12-25 0:09 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Dr. David Alan Gilbert @ 2025-12-25 0:09 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Manos Pitsidianakis, Pierrick Bouvier, Anton Johansson * Philippe Mathieu-Daudé (philmd@linaro.org) wrote: > cpu_get_phys_page_debug() takes a vaddr type since commit > 00b941e581b ("cpu: Turn cpu_get_phys_page_debug() into a CPUClass > hook"). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org> > --- > monitor/hmp-cmds-target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index e9820611466..2976f986d35 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -301,7 +301,7 @@ void hmp_gpa2hva(Monitor *mon, const QDict *qdict) > > void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > { > - target_ulong addr = qdict_get_int(qdict, "addr"); > + vaddr addr = qdict_get_int(qdict, "addr"); > CPUState *cs = mon_get_cpu(mon); > hwaddr gpa; > > -- > 2.52.0 > -- -----Open up your eyes, open up your mind, open up your code ------- / Dr. David Alan Gilbert | Running GNU/Linux | Happy \ \ dave @ treblig.org | | In Hex / \ _________________________|_____ http://www.treblig.org |_______/ ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:18 ` Manos Pitsidianakis 2025-12-25 0:18 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 3/6] monitor/hmp: Remove target_long uses " Philippe Mathieu-Daudé ` (3 subsequent siblings) 5 siblings, 2 replies; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé memory_dump() takes either hwaddr or vaddr type, depending on the @is_physical argument. Simply use uint64_t type which is common to both. Pad address using field width formatting, removing the need for the target_ulong type. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index 2976f986d35..c00f75eab3c 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -122,12 +122,13 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict) } static void memory_dump(Monitor *mon, int count, int format, int wsize, - hwaddr addr, int is_physical) + uint64_t addr, int is_physical) { int l, line_size, i, max_digits, len; uint8_t buf[16]; uint64_t v; CPUState *cs = mon_get_cpu(mon); + const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); if (!cs && (format == 'i' || !is_physical)) { monitor_printf(mon, "Can not dump without CPU\n"); @@ -165,11 +166,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, } while (len > 0) { - if (is_physical) { - monitor_printf(mon, HWADDR_FMT_plx ":", addr); - } else { - monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr); - } + monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); l = len; if (l > line_size) l = line_size; -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() 2025-12-24 13:39 ` [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() Philippe Mathieu-Daudé @ 2025-12-24 14:18 ` Manos Pitsidianakis 2025-12-25 0:18 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:18 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > memory_dump() takes either hwaddr or vaddr type, depending > on the @is_physical argument. Simply use uint64_t type which > is common to both. > Pad address using field width formatting, removing the need > for the target_ulong type. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > monitor/hmp-cmds-target.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index 2976f986d35..c00f75eab3c 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -122,12 +122,13 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict) > } > > static void memory_dump(Monitor *mon, int count, int format, int wsize, > - hwaddr addr, int is_physical) > + uint64_t addr, int is_physical) > { > int l, line_size, i, max_digits, len; > uint8_t buf[16]; > uint64_t v; > CPUState *cs = mon_get_cpu(mon); > + const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); > > if (!cs && (format == 'i' || !is_physical)) { > monitor_printf(mon, "Can not dump without CPU\n"); > @@ -165,11 +166,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > > while (len > 0) { > - if (is_physical) { > - monitor_printf(mon, HWADDR_FMT_plx ":", addr); > - } else { > - monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr); > - } > + monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > l = len; > if (l > line_size) > l = line_size; > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() 2025-12-24 13:39 ` [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() Philippe Mathieu-Daudé 2025-12-24 14:18 ` Manos Pitsidianakis @ 2025-12-25 0:18 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Dr. David Alan Gilbert @ 2025-12-25 0:18 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Manos Pitsidianakis, Pierrick Bouvier, Anton Johansson * Philippe Mathieu-Daudé (philmd@linaro.org) wrote: > memory_dump() takes either hwaddr or vaddr type, depending > on the @is_physical argument. Simply use uint64_t type which > is common to both. > Pad address using field width formatting, removing the need > for the target_ulong type. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > monitor/hmp-cmds-target.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index 2976f986d35..c00f75eab3c 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -122,12 +122,13 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict) > } > > static void memory_dump(Monitor *mon, int count, int format, int wsize, > - hwaddr addr, int is_physical) > + uint64_t addr, int is_physical) (It would be nice sometime for that to be a bool is_physical) > { > int l, line_size, i, max_digits, len; > uint8_t buf[16]; > uint64_t v; > CPUState *cs = mon_get_cpu(mon); > + const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); That's not obvious until you read later down to see how you're using it and see it's characters/nybbles. Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org> > if (!cs && (format == 'i' || !is_physical)) { > monitor_printf(mon, "Can not dump without CPU\n"); > @@ -165,11 +166,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > > while (len > 0) { > - if (is_physical) { > - monitor_printf(mon, HWADDR_FMT_plx ":", addr); > - } else { > - monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr); > - } > + monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > l = len; > if (l > line_size) > l = line_size; > -- > 2.52.0 > -- -----Open up your eyes, open up your mind, open up your code ------- / Dr. David Alan Gilbert | Running GNU/Linux | Happy \ \ dave @ treblig.org | | In Hex / \ _________________________|_____ http://www.treblig.org |_______/ ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 3/6] monitor/hmp: Remove target_long uses in memory_dump() 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé 2025-12-24 13:39 ` [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:19 ` Manos Pitsidianakis 2025-12-24 13:39 ` [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls " Philippe Mathieu-Daudé ` (2 subsequent siblings) 5 siblings, 1 reply; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé Pass a plain vaddr type to express virtual address. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index c00f75eab3c..d2bdf44dafd 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -232,7 +232,7 @@ void hmp_memory_dump(Monitor *mon, const QDict *qdict) int count = qdict_get_int(qdict, "count"); int format = qdict_get_int(qdict, "format"); int size = qdict_get_int(qdict, "size"); - target_long addr = qdict_get_int(qdict, "addr"); + vaddr addr = qdict_get_int(qdict, "addr"); memory_dump(mon, count, format, size, addr, 0); } -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 3/6] monitor/hmp: Remove target_long uses in memory_dump() 2025-12-24 13:39 ` [PATCH 3/6] monitor/hmp: Remove target_long uses " Philippe Mathieu-Daudé @ 2025-12-24 14:19 ` Manos Pitsidianakis 0 siblings, 0 replies; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:19 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > Pass a plain vaddr type to express virtual address. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > monitor/hmp-cmds-target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index c00f75eab3c..d2bdf44dafd 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -232,7 +232,7 @@ void hmp_memory_dump(Monitor *mon, const QDict *qdict) > int count = qdict_get_int(qdict, "count"); > int format = qdict_get_int(qdict, "format"); > int size = qdict_get_int(qdict, "size"); > - target_long addr = qdict_get_int(qdict, "addr"); > + vaddr addr = qdict_get_int(qdict, "addr"); > > memory_dump(mon, count, format, size, addr, 0); > } > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls in memory_dump() 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé ` (2 preceding siblings ...) 2025-12-24 13:39 ` [PATCH 3/6] monitor/hmp: Remove target_long uses " Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:19 ` Manos Pitsidianakis 2025-12-24 13:39 ` [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c Philippe Mathieu-Daudé 2025-12-24 13:39 ` [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 5 siblings, 1 reply; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé Remove the last target-specificity in this file. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index d2bdf44dafd..efab133cf2f 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -129,6 +129,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, uint64_t v; CPUState *cs = mon_get_cpu(mon); const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); + const bool big_endian = target_big_endian(); if (!cs && (format == 'i' || !is_physical)) { monitor_printf(mon, "Can not dump without CPU\n"); @@ -192,13 +193,13 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, v = ldub_p(buf + i); break; case 2: - v = lduw_p(buf + i); + v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); break; case 4: - v = (uint32_t)ldl_p(buf + i); + v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); break; case 8: - v = ldq_p(buf + i); + v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); break; } monitor_printf(mon, " "); -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls in memory_dump() 2025-12-24 13:39 ` [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls " Philippe Mathieu-Daudé @ 2025-12-24 14:19 ` Manos Pitsidianakis 0 siblings, 0 replies; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:19 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > Remove the last target-specificity in this file. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > monitor/hmp-cmds-target.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index d2bdf44dafd..efab133cf2f 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -129,6 +129,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > uint64_t v; > CPUState *cs = mon_get_cpu(mon); > const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); > + const bool big_endian = target_big_endian(); > > if (!cs && (format == 'i' || !is_physical)) { > monitor_printf(mon, "Can not dump without CPU\n"); > @@ -192,13 +193,13 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > v = ldub_p(buf + i); > break; > case 2: > - v = lduw_p(buf + i); > + v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); > break; > case 4: > - v = (uint32_t)ldl_p(buf + i); > + v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); > break; > case 8: > - v = ldq_p(buf + i); > + v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); > break; > } > monitor_printf(mon, " "); > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé ` (3 preceding siblings ...) 2025-12-24 13:39 ` [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls " Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:21 ` Manos Pitsidianakis 2025-12-25 0:40 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 5 siblings, 2 replies; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé Previous to moving code contained in hmp-cmds-target.c, fix the coding style. Otherwise the checkpatch.pl script would report: ERROR: space required before the open parenthesis '(' #134: FILE: monitor/hmp-cmds-target.c:152: + switch(format) { ERROR: braces {} are necessary for all arms of this statement #154: FILE: monitor/hmp-cmds-target.c:172: + if (l > line_size) [...] ERROR: space required before the open parenthesis '(' #172: FILE: monitor/hmp-cmds-target.c:190: + switch(wsize) { ERROR: space required before the open parenthesis '(' #188: FILE: monitor/hmp-cmds-target.c:206: + switch(format) { ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead #190: FILE: monitor/hmp-cmds-target.c:208: + monitor_printf(mon, "%#*" PRIo64, max_digits, v); WARNING: line over 80 characters #240: FILE: monitor/hmp-cmds-target.c:258: + error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); WARNING: line over 80 characters #245: FILE: monitor/hmp-cmds-target.c:263: + error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead #297: FILE: monitor/hmp-cmds-target.c:315: + monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", WARNING: line over 80 characters #329: FILE: monitor/hmp-cmds-target.c:347: + ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c index efab133cf2f..48c21559156 100644 --- a/monitor/hmp-cmds-target.c +++ b/monitor/hmp-cmds-target.c @@ -149,7 +149,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, } max_digits = 0; - switch(format) { + switch (format) { case 'o': max_digits = DIV_ROUND_UP(wsize * 8, 3); break; @@ -169,8 +169,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, while (len > 0) { monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); l = len; - if (l > line_size) + if (l > line_size) { l = line_size; + } if (is_physical) { AddressSpace *as = cs ? cs->as : &address_space_memory; MemTxResult r = address_space_read(as, addr, @@ -187,7 +188,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, } i = 0; while (i < l) { - switch(wsize) { + switch (wsize) { default: case 1: v = ldub_p(buf + i); @@ -203,9 +204,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, break; } monitor_printf(mon, " "); - switch(format) { + switch (format) { case 'o': - monitor_printf(mon, "%#*" PRIo64, max_digits, v); + monitor_printf(mon, "0%*" PRIo64, max_digits, v); break; case 'x': monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); @@ -255,12 +256,14 @@ void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) addr, size); if (!mrs.mr) { - error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); + error_setg(errp, + "No memory is mapped at address 0x%" HWADDR_PRIx, addr); return NULL; } if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { - error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); + error_setg(errp, + "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); memory_region_unref(mrs.mr); return NULL; } @@ -312,7 +315,7 @@ void hmp_gva2gpa(Monitor *mon, const QDict *qdict) if (gpa == -1) { monitor_printf(mon, "Unmapped\n"); } else { - monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", + monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", gpa + (addr & ~TARGET_PAGE_MASK)); } } @@ -344,7 +347,8 @@ static uint64_t vtop(void *ptr, Error **errp) error_setg(errp, "Page not present"); goto out; } - ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); + ret = (pinfo & 0x007fffffffffffffull) * pagesize; + ret |= addr & (pagesize - 1); out: close(fd); -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c 2025-12-24 13:39 ` [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c Philippe Mathieu-Daudé @ 2025-12-24 14:21 ` Manos Pitsidianakis 2025-12-25 0:40 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:21 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > Previous to moving code contained in hmp-cmds-target.c, > fix the coding style. Otherwise the checkpatch.pl script > would report: > > ERROR: space required before the open parenthesis '(' > #134: FILE: monitor/hmp-cmds-target.c:152: > + switch(format) { > > ERROR: braces {} are necessary for all arms of this statement > #154: FILE: monitor/hmp-cmds-target.c:172: > + if (l > line_size) > [...] > > ERROR: space required before the open parenthesis '(' > #172: FILE: monitor/hmp-cmds-target.c:190: > + switch(wsize) { > > ERROR: space required before the open parenthesis '(' > #188: FILE: monitor/hmp-cmds-target.c:206: > + switch(format) { > > ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead > #190: FILE: monitor/hmp-cmds-target.c:208: > + monitor_printf(mon, "%#*" PRIo64, max_digits, v); > > WARNING: line over 80 characters > #240: FILE: monitor/hmp-cmds-target.c:258: > + error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > > WARNING: line over 80 characters > #245: FILE: monitor/hmp-cmds-target.c:263: > + error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > > ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead > #297: FILE: monitor/hmp-cmds-target.c:315: > + monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", > > WARNING: line over 80 characters > #329: FILE: monitor/hmp-cmds-target.c:347: > + ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > monitor/hmp-cmds-target.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index efab133cf2f..48c21559156 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -149,7 +149,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > max_digits = 0; > > - switch(format) { > + switch (format) { > case 'o': > max_digits = DIV_ROUND_UP(wsize * 8, 3); > break; > @@ -169,8 +169,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > while (len > 0) { > monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > l = len; > - if (l > line_size) > + if (l > line_size) { > l = line_size; > + } > if (is_physical) { > AddressSpace *as = cs ? cs->as : &address_space_memory; > MemTxResult r = address_space_read(as, addr, > @@ -187,7 +188,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > i = 0; > while (i < l) { > - switch(wsize) { > + switch (wsize) { > default: > case 1: > v = ldub_p(buf + i); > @@ -203,9 +204,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > break; > } > monitor_printf(mon, " "); > - switch(format) { > + switch (format) { > case 'o': > - monitor_printf(mon, "%#*" PRIo64, max_digits, v); > + monitor_printf(mon, "0%*" PRIo64, max_digits, v); > break; > case 'x': > monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); > @@ -255,12 +256,14 @@ void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) > addr, size); > > if (!mrs.mr) { > - error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > + error_setg(errp, > + "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > return NULL; > } > > if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { > - error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > + error_setg(errp, > + "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > memory_region_unref(mrs.mr); > return NULL; > } > @@ -312,7 +315,7 @@ void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > if (gpa == -1) { > monitor_printf(mon, "Unmapped\n"); > } else { > - monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", > + monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", > gpa + (addr & ~TARGET_PAGE_MASK)); > } > } > @@ -344,7 +347,8 @@ static uint64_t vtop(void *ptr, Error **errp) > error_setg(errp, "Page not present"); > goto out; > } > - ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); > + ret = (pinfo & 0x007fffffffffffffull) * pagesize; > + ret |= addr & (pagesize - 1); > > out: > close(fd); > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c 2025-12-24 13:39 ` [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c Philippe Mathieu-Daudé 2025-12-24 14:21 ` Manos Pitsidianakis @ 2025-12-25 0:40 ` Dr. David Alan Gilbert 1 sibling, 0 replies; 18+ messages in thread From: Dr. David Alan Gilbert @ 2025-12-25 0:40 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Manos Pitsidianakis, Pierrick Bouvier, Anton Johansson * Philippe Mathieu-Daudé (philmd@linaro.org) wrote: > Previous to moving code contained in hmp-cmds-target.c, > fix the coding style. Otherwise the checkpatch.pl script > would report: Reviewed-by: Dr. David Alan Gilbert <dave@treblig.org> > > ERROR: space required before the open parenthesis '(' > #134: FILE: monitor/hmp-cmds-target.c:152: > + switch(format) { > > ERROR: braces {} are necessary for all arms of this statement > #154: FILE: monitor/hmp-cmds-target.c:172: > + if (l > line_size) > [...] > > ERROR: space required before the open parenthesis '(' > #172: FILE: monitor/hmp-cmds-target.c:190: > + switch(wsize) { > > ERROR: space required before the open parenthesis '(' > #188: FILE: monitor/hmp-cmds-target.c:206: > + switch(format) { > > ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead > #190: FILE: monitor/hmp-cmds-target.c:208: > + monitor_printf(mon, "%#*" PRIo64, max_digits, v); > > WARNING: line over 80 characters > #240: FILE: monitor/hmp-cmds-target.c:258: > + error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > > WARNING: line over 80 characters > #245: FILE: monitor/hmp-cmds-target.c:263: > + error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > > ERROR: Don't use '#' flag of printf format ('%#') in format strings, use '0x' prefix instead > #297: FILE: monitor/hmp-cmds-target.c:315: > + monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", > > WARNING: line over 80 characters > #329: FILE: monitor/hmp-cmds-target.c:347: > + ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > monitor/hmp-cmds-target.c | 22 +++++++++++++--------- > 1 file changed, 13 insertions(+), 9 deletions(-) > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > index efab133cf2f..48c21559156 100644 > --- a/monitor/hmp-cmds-target.c > +++ b/monitor/hmp-cmds-target.c > @@ -149,7 +149,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > max_digits = 0; > > - switch(format) { > + switch (format) { > case 'o': > max_digits = DIV_ROUND_UP(wsize * 8, 3); > break; > @@ -169,8 +169,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > while (len > 0) { > monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > l = len; > - if (l > line_size) > + if (l > line_size) { > l = line_size; > + } > if (is_physical) { > AddressSpace *as = cs ? cs->as : &address_space_memory; > MemTxResult r = address_space_read(as, addr, > @@ -187,7 +188,7 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > } > i = 0; > while (i < l) { > - switch(wsize) { > + switch (wsize) { > default: > case 1: > v = ldub_p(buf + i); > @@ -203,9 +204,9 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize, > break; > } > monitor_printf(mon, " "); > - switch(format) { > + switch (format) { > case 'o': > - monitor_printf(mon, "%#*" PRIo64, max_digits, v); > + monitor_printf(mon, "0%*" PRIo64, max_digits, v); > break; > case 'x': > monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); > @@ -255,12 +256,14 @@ void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) > addr, size); > > if (!mrs.mr) { > - error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > + error_setg(errp, > + "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > return NULL; > } > > if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { > - error_setg(errp, "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > + error_setg(errp, > + "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > memory_region_unref(mrs.mr); > return NULL; > } > @@ -312,7 +315,7 @@ void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > if (gpa == -1) { > monitor_printf(mon, "Unmapped\n"); > } else { > - monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n", > + monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", > gpa + (addr & ~TARGET_PAGE_MASK)); > } > } > @@ -344,7 +347,8 @@ static uint64_t vtop(void *ptr, Error **errp) > error_setg(errp, "Page not present"); > goto out; > } > - ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1)); > + ret = (pinfo & 0x007fffffffffffffull) * pagesize; > + ret |= addr & (pagesize - 1); > > out: > close(fd); > -- > 2.52.0 > -- -----Open up your eyes, open up your mind, open up your code ------- / Dr. David Alan Gilbert | Running GNU/Linux | Happy \ \ dave @ treblig.org | | In Hex / \ _________________________|_____ http://www.treblig.org |_______/ ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé ` (4 preceding siblings ...) 2025-12-24 13:39 ` [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c Philippe Mathieu-Daudé @ 2025-12-24 13:39 ` Philippe Mathieu-Daudé 2025-12-24 14:24 ` Manos Pitsidianakis 5 siblings, 1 reply; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 13:39 UTC (permalink / raw) To: qemu-devel Cc: Manos Pitsidianakis, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson, Philippe Mathieu-Daudé hmp-cmds-target.c is no more target specific, move its code in hmp-cmds.c, which is built once for all system binaries. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- monitor/hmp-cmds-target.c | 383 -------------------------------------- monitor/hmp-cmds.c | 354 +++++++++++++++++++++++++++++++++++ monitor/meson.build | 2 +- 3 files changed, 355 insertions(+), 384 deletions(-) delete mode 100644 monitor/hmp-cmds-target.c diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c deleted file mode 100644 index 48c21559156..00000000000 --- a/monitor/hmp-cmds-target.c +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Miscellaneous target-dependent HMP commands - * - * Copyright (c) 2003-2004 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include "qemu/osdep.h" -#include "disas/disas.h" -#include "system/address-spaces.h" -#include "system/memory.h" -#include "monitor/hmp-target.h" -#include "monitor/monitor-internal.h" -#include "qapi/error.h" -#include "qobject/qdict.h" -#include "system/hw_accel.h" -#include "exec/target_page.h" - -/* Set the current CPU defined by the user. Callers must hold BQL. */ -int monitor_set_cpu(Monitor *mon, int cpu_index) -{ - CPUState *cpu; - - cpu = qemu_get_cpu(cpu_index); - if (cpu == NULL) { - return -1; - } - g_free(mon->mon_cpu_path); - mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu)); - return 0; -} - -/* Callers must hold BQL. */ -static CPUState *mon_get_cpu_sync(Monitor *mon, bool synchronize) -{ - CPUState *cpu = NULL; - - if (mon->mon_cpu_path) { - cpu = (CPUState *) object_resolve_path_type(mon->mon_cpu_path, - TYPE_CPU, NULL); - if (!cpu) { - g_free(mon->mon_cpu_path); - mon->mon_cpu_path = NULL; - } - } - if (!mon->mon_cpu_path) { - if (!first_cpu) { - return NULL; - } - monitor_set_cpu(mon, first_cpu->cpu_index); - cpu = first_cpu; - } - assert(cpu != NULL); - if (synchronize) { - cpu_synchronize_state(cpu); - } - return cpu; -} - -CPUState *mon_get_cpu(Monitor *mon) -{ - return mon_get_cpu_sync(mon, true); -} - -CPUArchState *mon_get_cpu_env(Monitor *mon) -{ - CPUState *cs = mon_get_cpu(mon); - - return cs ? cpu_env(cs) : NULL; -} - -int monitor_get_cpu_index(Monitor *mon) -{ - CPUState *cs = mon_get_cpu_sync(mon, false); - - return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX; -} - -void hmp_info_registers(Monitor *mon, const QDict *qdict) -{ - bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false); - int vcpu = qdict_get_try_int(qdict, "vcpu", -1); - CPUState *cs; - - if (all_cpus) { - CPU_FOREACH(cs) { - monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); - cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); - } - } else { - cs = vcpu >= 0 ? qemu_get_cpu(vcpu) : mon_get_cpu(mon); - - if (!cs) { - if (vcpu >= 0) { - monitor_printf(mon, "CPU#%d not available\n", vcpu); - } else { - monitor_printf(mon, "No CPU available\n"); - } - return; - } - - monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); - cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); - } -} - -static void memory_dump(Monitor *mon, int count, int format, int wsize, - uint64_t addr, int is_physical) -{ - int l, line_size, i, max_digits, len; - uint8_t buf[16]; - uint64_t v; - CPUState *cs = mon_get_cpu(mon); - const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); - const bool big_endian = target_big_endian(); - - if (!cs && (format == 'i' || !is_physical)) { - monitor_printf(mon, "Can not dump without CPU\n"); - return; - } - - if (format == 'i') { - monitor_disas(mon, cs, addr, count, is_physical); - return; - } - - len = wsize * count; - if (wsize == 1) { - line_size = 8; - } else { - line_size = 16; - } - max_digits = 0; - - switch (format) { - case 'o': - max_digits = DIV_ROUND_UP(wsize * 8, 3); - break; - default: - case 'x': - max_digits = (wsize * 8) / 4; - break; - case 'u': - case 'd': - max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33); - break; - case 'c': - wsize = 1; - break; - } - - while (len > 0) { - monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); - l = len; - if (l > line_size) { - l = line_size; - } - if (is_physical) { - AddressSpace *as = cs ? cs->as : &address_space_memory; - MemTxResult r = address_space_read(as, addr, - MEMTXATTRS_UNSPECIFIED, buf, l); - if (r != MEMTX_OK) { - monitor_printf(mon, " Cannot access memory\n"); - break; - } - } else { - if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) { - monitor_printf(mon, " Cannot access memory\n"); - break; - } - } - i = 0; - while (i < l) { - switch (wsize) { - default: - case 1: - v = ldub_p(buf + i); - break; - case 2: - v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); - break; - case 4: - v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); - break; - case 8: - v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); - break; - } - monitor_printf(mon, " "); - switch (format) { - case 'o': - monitor_printf(mon, "0%*" PRIo64, max_digits, v); - break; - case 'x': - monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); - break; - case 'u': - monitor_printf(mon, "%*" PRIu64, max_digits, v); - break; - case 'd': - monitor_printf(mon, "%*" PRId64, max_digits, v); - break; - case 'c': - monitor_printc(mon, v); - break; - } - i += wsize; - } - monitor_printf(mon, "\n"); - addr += l; - len -= l; - } -} - -void hmp_memory_dump(Monitor *mon, const QDict *qdict) -{ - int count = qdict_get_int(qdict, "count"); - int format = qdict_get_int(qdict, "format"); - int size = qdict_get_int(qdict, "size"); - vaddr addr = qdict_get_int(qdict, "addr"); - - memory_dump(mon, count, format, size, addr, 0); -} - -void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict) -{ - int count = qdict_get_int(qdict, "count"); - int format = qdict_get_int(qdict, "format"); - int size = qdict_get_int(qdict, "size"); - hwaddr addr = qdict_get_int(qdict, "addr"); - - memory_dump(mon, count, format, size, addr, 1); -} - -void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) -{ - Int128 gpa_region_size; - MemoryRegionSection mrs = memory_region_find(get_system_memory(), - addr, size); - - if (!mrs.mr) { - error_setg(errp, - "No memory is mapped at address 0x%" HWADDR_PRIx, addr); - return NULL; - } - - if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { - error_setg(errp, - "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); - memory_region_unref(mrs.mr); - return NULL; - } - - gpa_region_size = int128_make64(size); - if (int128_lt(mrs.size, gpa_region_size)) { - error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx - " exceeded.", addr); - memory_region_unref(mrs.mr); - return NULL; - } - - *p_mr = mrs.mr; - return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region); -} - -void hmp_gpa2hva(Monitor *mon, const QDict *qdict) -{ - hwaddr addr = qdict_get_int(qdict, "addr"); - Error *local_err = NULL; - MemoryRegion *mr = NULL; - void *ptr; - - ptr = gpa2hva(&mr, addr, 1, &local_err); - if (local_err) { - error_report_err(local_err); - return; - } - - monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx - " (%s) is %p\n", - addr, mr->name, ptr); - - memory_region_unref(mr); -} - -void hmp_gva2gpa(Monitor *mon, const QDict *qdict) -{ - vaddr addr = qdict_get_int(qdict, "addr"); - CPUState *cs = mon_get_cpu(mon); - hwaddr gpa; - - if (!cs) { - monitor_printf(mon, "No cpu\n"); - return; - } - - gpa = cpu_get_phys_page_debug(cs, addr & TARGET_PAGE_MASK); - if (gpa == -1) { - monitor_printf(mon, "Unmapped\n"); - } else { - monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", - gpa + (addr & ~TARGET_PAGE_MASK)); - } -} - -#ifdef CONFIG_LINUX -static uint64_t vtop(void *ptr, Error **errp) -{ - uint64_t pinfo; - uint64_t ret = -1; - uintptr_t addr = (uintptr_t) ptr; - uintptr_t pagesize = qemu_real_host_page_size(); - off_t offset = addr / pagesize * sizeof(pinfo); - int fd; - - fd = open("/proc/self/pagemap", O_RDONLY); - if (fd == -1) { - error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap"); - return -1; - } - - /* Force copy-on-write if necessary. */ - qatomic_add((uint8_t *)ptr, 0); - - if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) { - error_setg_errno(errp, errno, "Cannot read pagemap"); - goto out; - } - if ((pinfo & (1ull << 63)) == 0) { - error_setg(errp, "Page not present"); - goto out; - } - ret = (pinfo & 0x007fffffffffffffull) * pagesize; - ret |= addr & (pagesize - 1); - -out: - close(fd); - return ret; -} - -void hmp_gpa2hpa(Monitor *mon, const QDict *qdict) -{ - hwaddr addr = qdict_get_int(qdict, "addr"); - Error *local_err = NULL; - MemoryRegion *mr = NULL; - void *ptr; - uint64_t physaddr; - - ptr = gpa2hva(&mr, addr, 1, &local_err); - if (local_err) { - error_report_err(local_err); - return; - } - - physaddr = vtop(ptr, &local_err); - if (local_err) { - error_report_err(local_err); - } else { - monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx - " (%s) is 0x%" PRIx64 "\n", - addr, mr->name, (uint64_t) physaddr); - } - - memory_region_unref(mr); -} -#endif diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c index 33a88ce205a..8ca40b447ae 100644 --- a/monitor/hmp-cmds.c +++ b/monitor/hmp-cmds.c @@ -17,9 +17,11 @@ #include "system/address-spaces.h" #include "system/ioport.h" #include "exec/gdbstub.h" +#include "exec/target_page.h" #include "gdbstub/enums.h" #include "monitor/hmp.h" #include "qemu/help_option.h" +#include "monitor/hmp-target.h" #include "monitor/monitor-internal.h" #include "qapi/error.h" #include "qapi/qapi-commands-control.h" @@ -28,7 +30,10 @@ #include "qobject/qdict.h" #include "qemu/cutils.h" #include "qemu/log.h" +#include "system/hw_accel.h" +#include "system/memory.h" #include "system/system.h" +#include "disas/disas.h" bool hmp_handle_error(Monitor *mon, Error *err) { @@ -435,3 +440,352 @@ void hmp_dumpdtb(Monitor *mon, const QDict *qdict) monitor_printf(mon, "DTB dumped to '%s'\n", filename); } #endif + +/* Set the current CPU defined by the user. Callers must hold BQL. */ +int monitor_set_cpu(Monitor *mon, int cpu_index) +{ + CPUState *cpu; + + cpu = qemu_get_cpu(cpu_index); + if (cpu == NULL) { + return -1; + } + g_free(mon->mon_cpu_path); + mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu)); + return 0; +} + +/* Callers must hold BQL. */ +static CPUState *mon_get_cpu_sync(Monitor *mon, bool synchronize) +{ + CPUState *cpu = NULL; + + if (mon->mon_cpu_path) { + cpu = (CPUState *) object_resolve_path_type(mon->mon_cpu_path, + TYPE_CPU, NULL); + if (!cpu) { + g_free(mon->mon_cpu_path); + mon->mon_cpu_path = NULL; + } + } + if (!mon->mon_cpu_path) { + if (!first_cpu) { + return NULL; + } + monitor_set_cpu(mon, first_cpu->cpu_index); + cpu = first_cpu; + } + assert(cpu != NULL); + if (synchronize) { + cpu_synchronize_state(cpu); + } + return cpu; +} + +CPUState *mon_get_cpu(Monitor *mon) +{ + return mon_get_cpu_sync(mon, true); +} + +CPUArchState *mon_get_cpu_env(Monitor *mon) +{ + CPUState *cs = mon_get_cpu(mon); + + return cs ? cpu_env(cs) : NULL; +} + +int monitor_get_cpu_index(Monitor *mon) +{ + CPUState *cs = mon_get_cpu_sync(mon, false); + + return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX; +} + +void hmp_info_registers(Monitor *mon, const QDict *qdict) +{ + bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false); + int vcpu = qdict_get_try_int(qdict, "vcpu", -1); + CPUState *cs; + + if (all_cpus) { + CPU_FOREACH(cs) { + monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); + cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); + } + } else { + cs = vcpu >= 0 ? qemu_get_cpu(vcpu) : mon_get_cpu(mon); + + if (!cs) { + if (vcpu >= 0) { + monitor_printf(mon, "CPU#%d not available\n", vcpu); + } else { + monitor_printf(mon, "No CPU available\n"); + } + return; + } + + monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); + cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); + } +} + +static void memory_dump(Monitor *mon, int count, int format, int wsize, + uint64_t addr, int is_physical) +{ + int l, line_size, i, max_digits, len; + uint8_t buf[16]; + uint64_t v; + CPUState *cs = mon_get_cpu(mon); + const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); + const bool big_endian = target_big_endian(); + + if (!cs && (format == 'i' || !is_physical)) { + monitor_printf(mon, "Can not dump without CPU\n"); + return; + } + + if (format == 'i') { + monitor_disas(mon, cs, addr, count, is_physical); + return; + } + + len = wsize * count; + if (wsize == 1) { + line_size = 8; + } else { + line_size = 16; + } + max_digits = 0; + + switch (format) { + case 'o': + max_digits = DIV_ROUND_UP(wsize * 8, 3); + break; + default: + case 'x': + max_digits = (wsize * 8) / 4; + break; + case 'u': + case 'd': + max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33); + break; + case 'c': + wsize = 1; + break; + } + + while (len > 0) { + monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); + l = len; + if (l > line_size) { + l = line_size; + } + if (is_physical) { + AddressSpace *as = cs ? cs->as : &address_space_memory; + MemTxResult r = address_space_read(as, addr, + MEMTXATTRS_UNSPECIFIED, buf, l); + if (r != MEMTX_OK) { + monitor_printf(mon, " Cannot access memory\n"); + break; + } + } else { + if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) { + monitor_printf(mon, " Cannot access memory\n"); + break; + } + } + i = 0; + while (i < l) { + switch (wsize) { + default: + case 1: + v = ldub_p(buf + i); + break; + case 2: + v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); + break; + case 4: + v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); + break; + case 8: + v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); + break; + } + monitor_printf(mon, " "); + switch (format) { + case 'o': + monitor_printf(mon, "0%*" PRIo64, max_digits, v); + break; + case 'x': + monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); + break; + case 'u': + monitor_printf(mon, "%*" PRIu64, max_digits, v); + break; + case 'd': + monitor_printf(mon, "%*" PRId64, max_digits, v); + break; + case 'c': + monitor_printc(mon, v); + break; + } + i += wsize; + } + monitor_printf(mon, "\n"); + addr += l; + len -= l; + } +} + +void hmp_memory_dump(Monitor *mon, const QDict *qdict) +{ + int count = qdict_get_int(qdict, "count"); + int format = qdict_get_int(qdict, "format"); + int size = qdict_get_int(qdict, "size"); + vaddr addr = qdict_get_int(qdict, "addr"); + + memory_dump(mon, count, format, size, addr, 0); +} + +void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict) +{ + int count = qdict_get_int(qdict, "count"); + int format = qdict_get_int(qdict, "format"); + int size = qdict_get_int(qdict, "size"); + hwaddr addr = qdict_get_int(qdict, "addr"); + + memory_dump(mon, count, format, size, addr, 1); +} + +void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) +{ + Int128 gpa_region_size; + MemoryRegionSection mrs = memory_region_find(get_system_memory(), + addr, size); + + if (!mrs.mr) { + error_setg(errp, + "No memory is mapped at address 0x%" HWADDR_PRIx, addr); + return NULL; + } + + if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { + error_setg(errp, + "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); + memory_region_unref(mrs.mr); + return NULL; + } + + gpa_region_size = int128_make64(size); + if (int128_lt(mrs.size, gpa_region_size)) { + error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx + " exceeded.", addr); + memory_region_unref(mrs.mr); + return NULL; + } + + *p_mr = mrs.mr; + return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region); +} + +void hmp_gpa2hva(Monitor *mon, const QDict *qdict) +{ + hwaddr addr = qdict_get_int(qdict, "addr"); + Error *local_err = NULL; + MemoryRegion *mr = NULL; + void *ptr; + + ptr = gpa2hva(&mr, addr, 1, &local_err); + if (local_err) { + error_report_err(local_err); + return; + } + + monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx + " (%s) is %p\n", + addr, mr->name, ptr); + + memory_region_unref(mr); +} + +void hmp_gva2gpa(Monitor *mon, const QDict *qdict) +{ + vaddr addr = qdict_get_int(qdict, "addr"); + CPUState *cs = mon_get_cpu(mon); + hwaddr gpa; + + if (!cs) { + monitor_printf(mon, "No cpu\n"); + return; + } + + gpa = cpu_get_phys_page_debug(cs, addr & TARGET_PAGE_MASK); + if (gpa == -1) { + monitor_printf(mon, "Unmapped\n"); + } else { + monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", + gpa + (addr & ~TARGET_PAGE_MASK)); + } +} + +#ifdef CONFIG_LINUX +static uint64_t vtop(void *ptr, Error **errp) +{ + uint64_t pinfo; + uint64_t ret = -1; + uintptr_t addr = (uintptr_t) ptr; + uintptr_t pagesize = qemu_real_host_page_size(); + off_t offset = addr / pagesize * sizeof(pinfo); + int fd; + + fd = open("/proc/self/pagemap", O_RDONLY); + if (fd == -1) { + error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap"); + return -1; + } + + /* Force copy-on-write if necessary. */ + qatomic_add((uint8_t *)ptr, 0); + + if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) { + error_setg_errno(errp, errno, "Cannot read pagemap"); + goto out; + } + if ((pinfo & (1ull << 63)) == 0) { + error_setg(errp, "Page not present"); + goto out; + } + ret = (pinfo & 0x007fffffffffffffull) * pagesize; + ret |= addr & (pagesize - 1); + +out: + close(fd); + return ret; +} + +void hmp_gpa2hpa(Monitor *mon, const QDict *qdict) +{ + hwaddr addr = qdict_get_int(qdict, "addr"); + Error *local_err = NULL; + MemoryRegion *mr = NULL; + void *ptr; + uint64_t physaddr; + + ptr = gpa2hva(&mr, addr, 1, &local_err); + if (local_err) { + error_report_err(local_err); + return; + } + + physaddr = vtop(ptr, &local_err); + if (local_err) { + error_report_err(local_err); + } else { + monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx + " (%s) is 0x%" PRIx64 "\n", + addr, mr->name, (uint64_t) physaddr); + } + + memory_region_unref(mr); +} +#endif diff --git a/monitor/meson.build b/monitor/meson.build index a71523a1ce8..763fcaba6c5 100644 --- a/monitor/meson.build +++ b/monitor/meson.build @@ -9,4 +9,4 @@ system_ss.add(files( system_ss.add([spice_headers, files('qmp-cmds.c')]) specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', - if_true: [files( 'hmp-cmds-target.c', 'hmp-target.c'), spice]) + if_true: [files('hmp-target.c'), spice]) -- 2.52.0 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c 2025-12-24 13:39 ` [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé @ 2025-12-24 14:24 ` Manos Pitsidianakis 2025-12-24 15:26 ` Philippe Mathieu-Daudé 0 siblings, 1 reply; 18+ messages in thread From: Manos Pitsidianakis @ 2025-12-24 14:24 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > hmp-cmds-target.c is no more target specific, move its code > in hmp-cmds.c, which is built once for all system binaries. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > monitor/hmp-cmds-target.c | 383 -------------------------------------- > monitor/hmp-cmds.c | 354 +++++++++++++++++++++++++++++++++++ > monitor/meson.build | 2 +- > 3 files changed, 355 insertions(+), 384 deletions(-) > delete mode 100644 monitor/hmp-cmds-target.c > > diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c > deleted file mode 100644 > index 48c21559156..00000000000 > --- a/monitor/hmp-cmds-target.c > +++ /dev/null > @@ -1,383 +0,0 @@ > -/* > - * Miscellaneous target-dependent HMP commands > - * > - * Copyright (c) 2003-2004 Fabrice Bellard > - * > - * Permission is hereby granted, free of charge, to any person obtaining a copy > - * of this software and associated documentation files (the "Software"), to deal > - * in the Software without restriction, including without limitation the rights > - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > - * copies of the Software, and to permit persons to whom the Software is > - * furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice shall be included in > - * all copies or substantial portions of the Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, > - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > - * THE SOFTWARE. > - */ > - > -#include "qemu/osdep.h" > -#include "disas/disas.h" > -#include "system/address-spaces.h" > -#include "system/memory.h" > -#include "monitor/hmp-target.h" > -#include "monitor/monitor-internal.h" > -#include "qapi/error.h" > -#include "qobject/qdict.h" > -#include "system/hw_accel.h" > -#include "exec/target_page.h" > - > -/* Set the current CPU defined by the user. Callers must hold BQL. */ > -int monitor_set_cpu(Monitor *mon, int cpu_index) > -{ > - CPUState *cpu; > - > - cpu = qemu_get_cpu(cpu_index); > - if (cpu == NULL) { > - return -1; > - } > - g_free(mon->mon_cpu_path); > - mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu)); > - return 0; > -} > - > -/* Callers must hold BQL. */ > -static CPUState *mon_get_cpu_sync(Monitor *mon, bool synchronize) > -{ > - CPUState *cpu = NULL; > - > - if (mon->mon_cpu_path) { > - cpu = (CPUState *) object_resolve_path_type(mon->mon_cpu_path, > - TYPE_CPU, NULL); > - if (!cpu) { > - g_free(mon->mon_cpu_path); > - mon->mon_cpu_path = NULL; > - } > - } > - if (!mon->mon_cpu_path) { > - if (!first_cpu) { > - return NULL; > - } > - monitor_set_cpu(mon, first_cpu->cpu_index); > - cpu = first_cpu; > - } > - assert(cpu != NULL); > - if (synchronize) { > - cpu_synchronize_state(cpu); > - } > - return cpu; > -} > - > -CPUState *mon_get_cpu(Monitor *mon) > -{ > - return mon_get_cpu_sync(mon, true); > -} > - > -CPUArchState *mon_get_cpu_env(Monitor *mon) > -{ > - CPUState *cs = mon_get_cpu(mon); > - > - return cs ? cpu_env(cs) : NULL; > -} > - > -int monitor_get_cpu_index(Monitor *mon) > -{ > - CPUState *cs = mon_get_cpu_sync(mon, false); > - > - return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX; > -} > - > -void hmp_info_registers(Monitor *mon, const QDict *qdict) > -{ > - bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false); > - int vcpu = qdict_get_try_int(qdict, "vcpu", -1); > - CPUState *cs; > - > - if (all_cpus) { > - CPU_FOREACH(cs) { > - monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); > - cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); > - } > - } else { > - cs = vcpu >= 0 ? qemu_get_cpu(vcpu) : mon_get_cpu(mon); > - > - if (!cs) { > - if (vcpu >= 0) { > - monitor_printf(mon, "CPU#%d not available\n", vcpu); > - } else { > - monitor_printf(mon, "No CPU available\n"); > - } > - return; > - } > - > - monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); > - cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); > - } > -} > - > -static void memory_dump(Monitor *mon, int count, int format, int wsize, > - uint64_t addr, int is_physical) > -{ > - int l, line_size, i, max_digits, len; > - uint8_t buf[16]; > - uint64_t v; > - CPUState *cs = mon_get_cpu(mon); > - const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); > - const bool big_endian = target_big_endian(); > - > - if (!cs && (format == 'i' || !is_physical)) { > - monitor_printf(mon, "Can not dump without CPU\n"); > - return; > - } > - > - if (format == 'i') { > - monitor_disas(mon, cs, addr, count, is_physical); > - return; > - } > - > - len = wsize * count; > - if (wsize == 1) { > - line_size = 8; > - } else { > - line_size = 16; > - } > - max_digits = 0; > - > - switch (format) { > - case 'o': > - max_digits = DIV_ROUND_UP(wsize * 8, 3); > - break; > - default: > - case 'x': > - max_digits = (wsize * 8) / 4; > - break; > - case 'u': > - case 'd': > - max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33); > - break; > - case 'c': > - wsize = 1; > - break; > - } > - > - while (len > 0) { > - monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > - l = len; > - if (l > line_size) { > - l = line_size; > - } > - if (is_physical) { > - AddressSpace *as = cs ? cs->as : &address_space_memory; > - MemTxResult r = address_space_read(as, addr, > - MEMTXATTRS_UNSPECIFIED, buf, l); > - if (r != MEMTX_OK) { > - monitor_printf(mon, " Cannot access memory\n"); > - break; > - } > - } else { > - if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) { > - monitor_printf(mon, " Cannot access memory\n"); > - break; > - } > - } > - i = 0; > - while (i < l) { > - switch (wsize) { > - default: > - case 1: > - v = ldub_p(buf + i); > - break; > - case 2: > - v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); > - break; > - case 4: > - v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); > - break; > - case 8: > - v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); > - break; > - } > - monitor_printf(mon, " "); > - switch (format) { > - case 'o': > - monitor_printf(mon, "0%*" PRIo64, max_digits, v); > - break; > - case 'x': > - monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); > - break; > - case 'u': > - monitor_printf(mon, "%*" PRIu64, max_digits, v); > - break; > - case 'd': > - monitor_printf(mon, "%*" PRId64, max_digits, v); > - break; > - case 'c': > - monitor_printc(mon, v); > - break; > - } > - i += wsize; > - } > - monitor_printf(mon, "\n"); > - addr += l; > - len -= l; > - } > -} > - > -void hmp_memory_dump(Monitor *mon, const QDict *qdict) > -{ > - int count = qdict_get_int(qdict, "count"); > - int format = qdict_get_int(qdict, "format"); > - int size = qdict_get_int(qdict, "size"); > - vaddr addr = qdict_get_int(qdict, "addr"); > - > - memory_dump(mon, count, format, size, addr, 0); > -} > - > -void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict) > -{ > - int count = qdict_get_int(qdict, "count"); > - int format = qdict_get_int(qdict, "format"); > - int size = qdict_get_int(qdict, "size"); > - hwaddr addr = qdict_get_int(qdict, "addr"); > - > - memory_dump(mon, count, format, size, addr, 1); > -} > - > -void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) > -{ > - Int128 gpa_region_size; > - MemoryRegionSection mrs = memory_region_find(get_system_memory(), > - addr, size); > - > - if (!mrs.mr) { > - error_setg(errp, > - "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > - return NULL; > - } > - > - if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { > - error_setg(errp, > - "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > - memory_region_unref(mrs.mr); > - return NULL; > - } > - > - gpa_region_size = int128_make64(size); > - if (int128_lt(mrs.size, gpa_region_size)) { > - error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx > - " exceeded.", addr); > - memory_region_unref(mrs.mr); > - return NULL; > - } > - > - *p_mr = mrs.mr; > - return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region); > -} > - > -void hmp_gpa2hva(Monitor *mon, const QDict *qdict) > -{ > - hwaddr addr = qdict_get_int(qdict, "addr"); > - Error *local_err = NULL; > - MemoryRegion *mr = NULL; > - void *ptr; > - > - ptr = gpa2hva(&mr, addr, 1, &local_err); > - if (local_err) { > - error_report_err(local_err); > - return; > - } > - > - monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx > - " (%s) is %p\n", > - addr, mr->name, ptr); > - > - memory_region_unref(mr); > -} > - > -void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > -{ > - vaddr addr = qdict_get_int(qdict, "addr"); > - CPUState *cs = mon_get_cpu(mon); > - hwaddr gpa; > - > - if (!cs) { > - monitor_printf(mon, "No cpu\n"); > - return; > - } > - > - gpa = cpu_get_phys_page_debug(cs, addr & TARGET_PAGE_MASK); > - if (gpa == -1) { > - monitor_printf(mon, "Unmapped\n"); > - } else { > - monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", > - gpa + (addr & ~TARGET_PAGE_MASK)); > - } > -} > - > -#ifdef CONFIG_LINUX > -static uint64_t vtop(void *ptr, Error **errp) > -{ > - uint64_t pinfo; > - uint64_t ret = -1; > - uintptr_t addr = (uintptr_t) ptr; > - uintptr_t pagesize = qemu_real_host_page_size(); > - off_t offset = addr / pagesize * sizeof(pinfo); > - int fd; > - > - fd = open("/proc/self/pagemap", O_RDONLY); > - if (fd == -1) { > - error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap"); > - return -1; > - } > - > - /* Force copy-on-write if necessary. */ > - qatomic_add((uint8_t *)ptr, 0); > - > - if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) { > - error_setg_errno(errp, errno, "Cannot read pagemap"); > - goto out; > - } > - if ((pinfo & (1ull << 63)) == 0) { > - error_setg(errp, "Page not present"); > - goto out; > - } > - ret = (pinfo & 0x007fffffffffffffull) * pagesize; > - ret |= addr & (pagesize - 1); > - > -out: > - close(fd); > - return ret; > -} > - > -void hmp_gpa2hpa(Monitor *mon, const QDict *qdict) > -{ > - hwaddr addr = qdict_get_int(qdict, "addr"); > - Error *local_err = NULL; > - MemoryRegion *mr = NULL; > - void *ptr; > - uint64_t physaddr; > - > - ptr = gpa2hva(&mr, addr, 1, &local_err); > - if (local_err) { > - error_report_err(local_err); > - return; > - } > - > - physaddr = vtop(ptr, &local_err); > - if (local_err) { > - error_report_err(local_err); > - } else { > - monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx > - " (%s) is 0x%" PRIx64 "\n", > - addr, mr->name, (uint64_t) physaddr); > - } > - > - memory_region_unref(mr); > -} > -#endif > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c > index 33a88ce205a..8ca40b447ae 100644 > --- a/monitor/hmp-cmds.c > +++ b/monitor/hmp-cmds.c > @@ -17,9 +17,11 @@ > #include "system/address-spaces.h" > #include "system/ioport.h" > #include "exec/gdbstub.h" > +#include "exec/target_page.h" > #include "gdbstub/enums.h" > #include "monitor/hmp.h" > #include "qemu/help_option.h" > +#include "monitor/hmp-target.h" > #include "monitor/monitor-internal.h" > #include "qapi/error.h" > #include "qapi/qapi-commands-control.h" > @@ -28,7 +30,10 @@ > #include "qobject/qdict.h" > #include "qemu/cutils.h" > #include "qemu/log.h" > +#include "system/hw_accel.h" > +#include "system/memory.h" > #include "system/system.h" > +#include "disas/disas.h" > > bool hmp_handle_error(Monitor *mon, Error *err) > { > @@ -435,3 +440,352 @@ void hmp_dumpdtb(Monitor *mon, const QDict *qdict) > monitor_printf(mon, "DTB dumped to '%s'\n", filename); > } > #endif > + > +/* Set the current CPU defined by the user. Callers must hold BQL. */ > +int monitor_set_cpu(Monitor *mon, int cpu_index) > +{ > + CPUState *cpu; > + > + cpu = qemu_get_cpu(cpu_index); > + if (cpu == NULL) { > + return -1; > + } > + g_free(mon->mon_cpu_path); > + mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu)); > + return 0; > +} > + > +/* Callers must hold BQL. */ > +static CPUState *mon_get_cpu_sync(Monitor *mon, bool synchronize) > +{ > + CPUState *cpu = NULL; > + > + if (mon->mon_cpu_path) { > + cpu = (CPUState *) object_resolve_path_type(mon->mon_cpu_path, > + TYPE_CPU, NULL); > + if (!cpu) { > + g_free(mon->mon_cpu_path); > + mon->mon_cpu_path = NULL; > + } > + } > + if (!mon->mon_cpu_path) { > + if (!first_cpu) { > + return NULL; > + } > + monitor_set_cpu(mon, first_cpu->cpu_index); > + cpu = first_cpu; > + } > + assert(cpu != NULL); > + if (synchronize) { > + cpu_synchronize_state(cpu); > + } > + return cpu; > +} > + > +CPUState *mon_get_cpu(Monitor *mon) > +{ > + return mon_get_cpu_sync(mon, true); > +} > + > +CPUArchState *mon_get_cpu_env(Monitor *mon) > +{ > + CPUState *cs = mon_get_cpu(mon); > + > + return cs ? cpu_env(cs) : NULL; > +} > + > +int monitor_get_cpu_index(Monitor *mon) > +{ > + CPUState *cs = mon_get_cpu_sync(mon, false); > + > + return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX; > +} > + > +void hmp_info_registers(Monitor *mon, const QDict *qdict) > +{ > + bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false); > + int vcpu = qdict_get_try_int(qdict, "vcpu", -1); > + CPUState *cs; > + > + if (all_cpus) { > + CPU_FOREACH(cs) { > + monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); > + cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); > + } > + } else { > + cs = vcpu >= 0 ? qemu_get_cpu(vcpu) : mon_get_cpu(mon); > + > + if (!cs) { > + if (vcpu >= 0) { > + monitor_printf(mon, "CPU#%d not available\n", vcpu); > + } else { > + monitor_printf(mon, "No CPU available\n"); > + } > + return; > + } > + > + monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index); > + cpu_dump_state(cs, NULL, CPU_DUMP_FPU | CPU_DUMP_VPU); > + } > +} > + > +static void memory_dump(Monitor *mon, int count, int format, int wsize, > + uint64_t addr, int is_physical) > +{ > + int l, line_size, i, max_digits, len; > + uint8_t buf[16]; > + uint64_t v; > + CPUState *cs = mon_get_cpu(mon); > + const unsigned int addr_width = is_physical ? 8 : (target_long_bits() * 2); > + const bool big_endian = target_big_endian(); > + > + if (!cs && (format == 'i' || !is_physical)) { > + monitor_printf(mon, "Can not dump without CPU\n"); > + return; > + } > + > + if (format == 'i') { > + monitor_disas(mon, cs, addr, count, is_physical); > + return; > + } > + > + len = wsize * count; > + if (wsize == 1) { > + line_size = 8; > + } else { > + line_size = 16; > + } > + max_digits = 0; > + > + switch (format) { > + case 'o': > + max_digits = DIV_ROUND_UP(wsize * 8, 3); > + break; > + default: > + case 'x': > + max_digits = (wsize * 8) / 4; > + break; > + case 'u': > + case 'd': > + max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33); > + break; > + case 'c': > + wsize = 1; > + break; > + } > + > + while (len > 0) { > + monitor_printf(mon, "%0*" PRIx64 ":", addr_width, addr); > + l = len; > + if (l > line_size) { > + l = line_size; > + } > + if (is_physical) { > + AddressSpace *as = cs ? cs->as : &address_space_memory; > + MemTxResult r = address_space_read(as, addr, > + MEMTXATTRS_UNSPECIFIED, buf, l); > + if (r != MEMTX_OK) { > + monitor_printf(mon, " Cannot access memory\n"); > + break; > + } > + } else { > + if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) { > + monitor_printf(mon, " Cannot access memory\n"); > + break; > + } > + } > + i = 0; > + while (i < l) { > + switch (wsize) { > + default: > + case 1: > + v = ldub_p(buf + i); > + break; > + case 2: > + v = (big_endian ? lduw_be_p : lduw_le_p)(buf + i); > + break; > + case 4: > + v = (uint32_t)(big_endian ? ldl_be_p : ldl_le_p)(buf + i); > + break; > + case 8: > + v = (big_endian ? ldq_be_p : ldq_le_p)(buf + i); > + break; > + } > + monitor_printf(mon, " "); > + switch (format) { > + case 'o': > + monitor_printf(mon, "0%*" PRIo64, max_digits, v); > + break; > + case 'x': > + monitor_printf(mon, "0x%0*" PRIx64, max_digits, v); > + break; > + case 'u': > + monitor_printf(mon, "%*" PRIu64, max_digits, v); > + break; > + case 'd': > + monitor_printf(mon, "%*" PRId64, max_digits, v); > + break; > + case 'c': > + monitor_printc(mon, v); > + break; > + } > + i += wsize; > + } > + monitor_printf(mon, "\n"); > + addr += l; > + len -= l; > + } > +} > + > +void hmp_memory_dump(Monitor *mon, const QDict *qdict) > +{ > + int count = qdict_get_int(qdict, "count"); > + int format = qdict_get_int(qdict, "format"); > + int size = qdict_get_int(qdict, "size"); > + vaddr addr = qdict_get_int(qdict, "addr"); > + > + memory_dump(mon, count, format, size, addr, 0); > +} > + > +void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict) > +{ > + int count = qdict_get_int(qdict, "count"); > + int format = qdict_get_int(qdict, "format"); > + int size = qdict_get_int(qdict, "size"); > + hwaddr addr = qdict_get_int(qdict, "addr"); > + > + memory_dump(mon, count, format, size, addr, 1); > +} > + > +void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, uint64_t size, Error **errp) > +{ > + Int128 gpa_region_size; > + MemoryRegionSection mrs = memory_region_find(get_system_memory(), > + addr, size); > + > + if (!mrs.mr) { > + error_setg(errp, > + "No memory is mapped at address 0x%" HWADDR_PRIx, addr); > + return NULL; > + } > + > + if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) { > + error_setg(errp, > + "Memory at address 0x%" HWADDR_PRIx " is not RAM", addr); > + memory_region_unref(mrs.mr); > + return NULL; > + } > + > + gpa_region_size = int128_make64(size); > + if (int128_lt(mrs.size, gpa_region_size)) { > + error_setg(errp, "Size of memory region at 0x%" HWADDR_PRIx > + " exceeded.", addr); > + memory_region_unref(mrs.mr); > + return NULL; > + } > + > + *p_mr = mrs.mr; > + return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region); > +} > + > +void hmp_gpa2hva(Monitor *mon, const QDict *qdict) > +{ > + hwaddr addr = qdict_get_int(qdict, "addr"); > + Error *local_err = NULL; > + MemoryRegion *mr = NULL; > + void *ptr; > + > + ptr = gpa2hva(&mr, addr, 1, &local_err); > + if (local_err) { > + error_report_err(local_err); > + return; > + } > + > + monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx > + " (%s) is %p\n", > + addr, mr->name, ptr); > + > + memory_region_unref(mr); > +} > + > +void hmp_gva2gpa(Monitor *mon, const QDict *qdict) > +{ > + vaddr addr = qdict_get_int(qdict, "addr"); > + CPUState *cs = mon_get_cpu(mon); > + hwaddr gpa; > + > + if (!cs) { > + monitor_printf(mon, "No cpu\n"); > + return; > + } > + > + gpa = cpu_get_phys_page_debug(cs, addr & TARGET_PAGE_MASK); > + if (gpa == -1) { > + monitor_printf(mon, "Unmapped\n"); > + } else { > + monitor_printf(mon, "gpa: 0x%" HWADDR_PRIx "\n", > + gpa + (addr & ~TARGET_PAGE_MASK)); > + } > +} > + > +#ifdef CONFIG_LINUX > +static uint64_t vtop(void *ptr, Error **errp) > +{ > + uint64_t pinfo; > + uint64_t ret = -1; > + uintptr_t addr = (uintptr_t) ptr; > + uintptr_t pagesize = qemu_real_host_page_size(); > + off_t offset = addr / pagesize * sizeof(pinfo); > + int fd; > + > + fd = open("/proc/self/pagemap", O_RDONLY); > + if (fd == -1) { > + error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap"); > + return -1; > + } > + > + /* Force copy-on-write if necessary. */ > + qatomic_add((uint8_t *)ptr, 0); > + > + if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) { > + error_setg_errno(errp, errno, "Cannot read pagemap"); > + goto out; > + } > + if ((pinfo & (1ull << 63)) == 0) { > + error_setg(errp, "Page not present"); > + goto out; > + } > + ret = (pinfo & 0x007fffffffffffffull) * pagesize; > + ret |= addr & (pagesize - 1); > + > +out: > + close(fd); > + return ret; > +} > + > +void hmp_gpa2hpa(Monitor *mon, const QDict *qdict) > +{ > + hwaddr addr = qdict_get_int(qdict, "addr"); > + Error *local_err = NULL; > + MemoryRegion *mr = NULL; > + void *ptr; > + uint64_t physaddr; > + > + ptr = gpa2hva(&mr, addr, 1, &local_err); > + if (local_err) { > + error_report_err(local_err); > + return; > + } > + > + physaddr = vtop(ptr, &local_err); > + if (local_err) { > + error_report_err(local_err); > + } else { > + monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx > + " (%s) is 0x%" PRIx64 "\n", > + addr, mr->name, (uint64_t) physaddr); > + } > + > + memory_region_unref(mr); > +} > +#endif > diff --git a/monitor/meson.build b/monitor/meson.build > index a71523a1ce8..763fcaba6c5 100644 > --- a/monitor/meson.build > +++ b/monitor/meson.build > @@ -9,4 +9,4 @@ system_ss.add(files( > system_ss.add([spice_headers, files('qmp-cmds.c')]) > > specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', > - if_true: [files( 'hmp-cmds-target.c', 'hmp-target.c'), spice]) > + if_true: [files('hmp-target.c'), spice]) Nit: Indentation? Otherwise Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c 2025-12-24 14:24 ` Manos Pitsidianakis @ 2025-12-24 15:26 ` Philippe Mathieu-Daudé 2025-12-25 0:53 ` Dr. David Alan Gilbert 0 siblings, 1 reply; 18+ messages in thread From: Philippe Mathieu-Daudé @ 2025-12-24 15:26 UTC (permalink / raw) To: Manos Pitsidianakis, Marc-André Lureau, Paolo Bonzini Cc: qemu-devel, Dr. David Alan Gilbert, Pierrick Bouvier, Anton Johansson On 24/12/25 15:24, Manos Pitsidianakis wrote: > On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé > <philmd@linaro.org> wrote: >> >> hmp-cmds-target.c is no more target specific, move its code >> in hmp-cmds.c, which is built once for all system binaries. >> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> --- >> monitor/hmp-cmds-target.c | 383 -------------------------------------- >> monitor/hmp-cmds.c | 354 +++++++++++++++++++++++++++++++++++ >> monitor/meson.build | 2 +- >> 3 files changed, 355 insertions(+), 384 deletions(-) >> delete mode 100644 monitor/hmp-cmds-target.c >> diff --git a/monitor/meson.build b/monitor/meson.build >> index a71523a1ce8..763fcaba6c5 100644 >> --- a/monitor/meson.build >> +++ b/monitor/meson.build >> @@ -9,4 +9,4 @@ system_ss.add(files( >> system_ss.add([spice_headers, files('qmp-cmds.c')]) >> >> specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', >> - if_true: [files( 'hmp-cmds-target.c', 'hmp-target.c'), spice]) >> + if_true: [files('hmp-target.c'), spice]) > > Nit: Indentation? We usually don't use tabs in meson.build files, and indent as 2 spaces, but I couldn't find any documented style enforcement :/ Paolo, Marc-André, any preference? > > Otherwise > > Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Thanks! ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c 2025-12-24 15:26 ` Philippe Mathieu-Daudé @ 2025-12-25 0:53 ` Dr. David Alan Gilbert 0 siblings, 0 replies; 18+ messages in thread From: Dr. David Alan Gilbert @ 2025-12-25 0:53 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: Manos Pitsidianakis, Marc-André Lureau, Paolo Bonzini, qemu-devel, Pierrick Bouvier, Anton Johansson * Philippe Mathieu-Daudé (philmd@linaro.org) wrote: > On 24/12/25 15:24, Manos Pitsidianakis wrote: > > On Wed, Dec 24, 2025 at 3:40 PM Philippe Mathieu-Daudé > > <philmd@linaro.org> wrote: > > > > > > hmp-cmds-target.c is no more target specific, move its code > > > in hmp-cmds.c, which is built once for all system binaries. > > > > > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > > > --- > > > monitor/hmp-cmds-target.c | 383 -------------------------------------- > > > monitor/hmp-cmds.c | 354 +++++++++++++++++++++++++++++++++++ > > > monitor/meson.build | 2 +- > > > 3 files changed, 355 insertions(+), 384 deletions(-) > > > delete mode 100644 monitor/hmp-cmds-target.c > > > > > diff --git a/monitor/meson.build b/monitor/meson.build > > > index a71523a1ce8..763fcaba6c5 100644 > > > --- a/monitor/meson.build > > > +++ b/monitor/meson.build > > > @@ -9,4 +9,4 @@ system_ss.add(files( > > > system_ss.add([spice_headers, files('qmp-cmds.c')]) > > > > > > specific_ss.add(when: 'CONFIG_SYSTEM_ONLY', > > > - if_true: [files( 'hmp-cmds-target.c', 'hmp-target.c'), spice]) > > > + if_true: [files('hmp-target.c'), spice]) > > > > Nit: Indentation? > > We usually don't use tabs in meson.build files, and indent as 2 spaces, > but I couldn't find any documented style enforcement :/ Looking at ui/meson.build and audio/meson.build, it looks like if_true: on separate lines are generally aligned with the ( (ish....) Dave > Paolo, Marc-André, any preference? > > > > > Otherwise > > > > Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> > > Thanks! -- -----Open up your eyes, open up your mind, open up your code ------- / Dr. David Alan Gilbert | Running GNU/Linux | Happy \ \ dave @ treblig.org | | In Hex / \ _________________________|_____ http://www.treblig.org |_______/ ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2025-12-25 0:53 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-12-24 13:39 [PATCH 0/6] monitor: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 2025-12-24 13:39 ` [PATCH 1/6] monitor/hmp: Replace target_ulong -> vaddr in hmp_gva2gpa() Philippe Mathieu-Daudé 2025-12-24 14:17 ` Manos Pitsidianakis 2025-12-25 0:09 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 2/6] monitor/hmp: Use plain uint64_t @addr argument in memory_dump() Philippe Mathieu-Daudé 2025-12-24 14:18 ` Manos Pitsidianakis 2025-12-25 0:18 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 3/6] monitor/hmp: Remove target_long uses " Philippe Mathieu-Daudé 2025-12-24 14:19 ` Manos Pitsidianakis 2025-12-24 13:39 ` [PATCH 4/6] monitor/hmp: Inline ld[uw, l, q]_p() calls " Philippe Mathieu-Daudé 2025-12-24 14:19 ` Manos Pitsidianakis 2025-12-24 13:39 ` [PATCH 5/6] monitor/hmp: Fix coding style in hmp-cmds-target.c Philippe Mathieu-Daudé 2025-12-24 14:21 ` Manos Pitsidianakis 2025-12-25 0:40 ` Dr. David Alan Gilbert 2025-12-24 13:39 ` [PATCH 6/6] monitor/hmp: Merge hmp-cmds-target.c within hmp-cmds.c Philippe Mathieu-Daudé 2025-12-24 14:24 ` Manos Pitsidianakis 2025-12-24 15:26 ` Philippe Mathieu-Daudé 2025-12-25 0:53 ` Dr. David Alan Gilbert
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.