Skip to content

Commit

Permalink
dump: Update correct kdump phys_base field for AArch64
Browse files Browse the repository at this point in the history
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: Wei Huang <wei@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 1520615003-20869-1-git-send-email-wei@redhat.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
huangwei authored and pm215 committed Mar 19, 2018
1 parent 6461d7e commit 68cbecf
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions dump.c
Expand Up @@ -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;
}
Expand Down

0 comments on commit 68cbecf

Please sign in to comment.