Commit 68cbecfd authored by Wei Huang's avatar Wei Huang Committed by Peter Maydell
Browse files

dump: Update correct kdump phys_base field for AArch64



For guest kernel that supports KASLR, the load address can change every
time when guest VM runs. To find the physical base address correctly,
current QEMU dump searches VMCOREINFO for the string "NUMBER(phys_base)=".
However this string pattern is only available on x86_64. AArch64 uses a
different field, called "NUMBER(PHYS_OFFSET)=". This patch makes sure
QEMU dump uses the correct string on AArch64.

Signed-off-by: default avatarWei Huang <wei@redhat.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 1520615003-20869-1-git-send-email-wei@redhat.com
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 6461d7e2
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -1609,10 +1609,18 @@ static void vmcoreinfo_update_phys_base(DumpState *s)

    lines = g_strsplit((char *)vmci, "\n", -1);
    for (i = 0; lines[i]; i++) {
        if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) {
            if (qemu_strtou64(lines[i] + 18, NULL, 16,
        const char *prefix = NULL;

        if (s->dump_info.d_machine == EM_X86_64) {
            prefix = "NUMBER(phys_base)=";
        } else if (s->dump_info.d_machine == EM_AARCH64) {
            prefix = "NUMBER(PHYS_OFFSET)=";
        }

        if (prefix && g_str_has_prefix(lines[i], prefix)) {
            if (qemu_strtou64(lines[i] + strlen(prefix), NULL, 16,
                              &phys_base) < 0) {
                warn_report("Failed to read NUMBER(phys_base)=");
                warn_report("Failed to read %s", prefix);
            } else {
                s->dump_info.phys_base = phys_base;
            }