----- 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/2d8895c36a3a533b6555a21c866...
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