Commit 0f0f380ab3 for qemu.org
commit 0f0f380ab33c29d1d35cbe1a9d70b66d6e470a17
Author: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Date: Wed Oct 21 11:12:30 2026 -0700
target/i386: implement get_dump_info sysemu op
For now, we keep the global cpu_get_dump_info symbol defined.
Reviewed-by: Anton Johansson <anjo@rev.ng>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20261021181244.867840-8-pierrick.bouvier@oss.qualcomm.com
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
diff --git a/target/i386/arch_dump.c b/target/i386/arch_dump.c
index 16e47c4747..ed273708c6 100644
--- a/target/i386/arch_dump.c
+++ b/target/i386/arch_dump.c
@@ -16,6 +16,7 @@
#include "system/dump.h"
#include "elf.h"
#include "system/memory_mapping.h"
+#include "cpu-internal.h"
#define ELF_NOTE_SIZE(hdr_size, name_size, desc_size) \
((DIV_ROUND_UP((hdr_size), 4) \
@@ -394,15 +395,15 @@ int x86_cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cs,
return cpu_write_qemu_note(f, &cpu->env, s, 0);
}
-int cpu_get_dump_info(ArchDumpInfo *info,
- const GuestPhysBlockList *guest_phys_blocks)
+void x86_get_dump_info(const CPUState *cs, ArchDumpInfo *info,
+ const GuestPhysBlockList *guest_phys_blocks)
{
bool lma = false;
GuestPhysBlock *block;
#ifdef TARGET_X86_64
- X86CPU *first_x86_cpu = X86_CPU(first_cpu);
- lma = first_cpu && (first_x86_cpu->env.hflags & HF_LMA_MASK);
+ const X86CPU *cpu = X86_CPU(cs);
+ lma = !!(cpu->env.hflags & HF_LMA_MASK);
#endif
if (lma) {
@@ -425,7 +426,16 @@ int cpu_get_dump_info(ArchDumpInfo *info,
}
}
}
+}
+
+int cpu_get_dump_info(ArchDumpInfo *info,
+ const GuestPhysBlockList *guest_phys_blocks)
+{
+ if (first_cpu == NULL) {
+ return -1;
+ }
+ x86_get_dump_info(first_cpu, info, guest_phys_blocks);
return 0;
}
diff --git a/target/i386/cpu-internal.h b/target/i386/cpu-internal.h
index 37c61a1bc3..75bbd00bc7 100644
--- a/target/i386/cpu-internal.h
+++ b/target/i386/cpu-internal.h
@@ -65,6 +65,9 @@ void x86_cpu_get_crash_info_qom(Object *obj, Visitor *v,
void x86_cpu_apic_create(X86CPU *cpu, Error **errp);
void x86_cpu_apic_realize(X86CPU *cpu, Error **errp);
void x86_cpu_machine_reset_cb(void *opaque);
+
+void x86_get_dump_info(const CPUState *cs, ArchDumpInfo *info,
+ const GuestPhysBlockList *guest_phys_blocks);
#endif /* !CONFIG_USER_ONLY */
#endif /* I386_CPU_INTERNAL_H */
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 5da80ade70..49f453bb01 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -10920,6 +10920,7 @@ static const struct SysemuCPUOps i386_sysemu_ops = {
.write_elf64_note = x86_cpu_write_elf64_note,
.write_elf32_qemunote = x86_cpu_write_elf32_qemunote,
.write_elf64_qemunote = x86_cpu_write_elf64_qemunote,
+ .get_dump_info = x86_get_dump_info,
#ifdef CONFIG_HMP
.monitor_defs = x86_monitor_defs,
#endif