----- Original Message ----- > Thanks to kernel commit 9d372c9fab34 "arm64: Add page size to the > kernel image header", we don't need a heuristic to determine the > pagesize on arm64. Keep the heuristic for older kernels, but try > reading the header first.
This looks good -- I also added the new kernel_flags field to arm64_dump_machdep_table() for display by "help -m". Queued for crash-7.1.4: https://github.com/crash-utility/crash/commit/2d8895c36a3a533b6555a21c86601b663f1f4f44 Thanks, Dave > --- > arm64.c | 30 ++++++++++++++++++++++++++++++ > defs.h | 1 + > 2 files changed, 31 insertions(+) > > diff --git a/arm64.c b/arm64.c > index 5f8e2f6852434..9d03d1d54b574 100644 > --- a/arm64.c > +++ b/arm64.c > @@ -19,6 +19,7 @@ > > #include "defs.h" > #include <elf.h> > +#include <endian.h> > > #define NOT_IMPLEMENTED(X) error((X), "%s: function not implemented\n", > __func__) > > @@ -97,6 +98,32 @@ arm64_init(int when) > break; > > case PRE_GDB: > + if (!machdep->pagesize) { > + /* > + * Kerneldoc Documentation/arm64/booting.txt describes > + * the kernel image header flags field. > + */ > + value = machdep->machspec->kernel_flags; > + value = (value >> 1) & 3; > + > + switch(value) > + { > + case 0: > + break; > + case 1: > + machdep->pagesize = 4096; > + break; > + case 2: > + /* TODO: machdep->pagesize = 16384; */ > + error(FATAL, "16K pages not supported."); > + break; > + case 3: > + machdep->pagesize = 65536; > + break; > + } > + > + } > + > if (!machdep->pagesize && > kernel_symbol_exists("swapper_pg_dir") && > kernel_symbol_exists("idmap_pg_dir")) { > @@ -305,6 +332,9 @@ arm64_verify_symbol(const char *name, ulong value, char > type) > if (!name || !strlen(name)) > return FALSE; > > + if ((type == 'A') && STREQ(name, "_kernel_flags_le")) > + machdep->machspec->kernel_flags = le64toh(value); > + > if (((type == 'A') || (type == 'a')) && (highest_bit_long(value) != 63)) > return FALSE; > > diff --git a/defs.h b/defs.h > index 7004619017e41..3e5dbd99942b2 100644 > --- a/defs.h > +++ b/defs.h > @@ -2944,6 +2944,7 @@ struct machine_specific { > ulong crash_kexec_end; > ulong crash_save_cpu_start; > ulong crash_save_cpu_end; > + ulong kernel_flags; > }; > > struct arm64_stackframe { > -- > 2.4.3 > > -- Crash-utility mailing list [email protected] https://www.redhat.com/mailman/listinfo/crash-utility
