Hi

On Fri, Mar 9, 2018 at 6:03 PM, Wei Huang <w...@redhat.com> wrote:
> 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 <w...@redhat.com>

Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com>


> ---
>  dump.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/dump.c b/dump.c
> index 097e60b..6bdb0db 100644
> --- a/dump.c
> +++ b/dump.c
> @@ -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;
>              }
> --
> 1.8.3.1
>

Reply via email to