Basically, these should be exported as VMCOREINFO from kernel. But we cannot modify old kernels. Luckily, page flag values had frequently changed in old kernels, so on old kernels, it's relatively easy to determine appropreate page flags on a given kernel version without any symbol and type information. Specifically: - PG_slab has had the same value 7 since v2.6.15, and - PG_buddy had been defined as macro value from v2.6.17 to v2.6.26 On later kernel version, enum pageflags type was introduced and at the version, PG_buddy's value depends on CONFIG_PAGEFLAGS_EXTEND; luckily, this can be determined by looking at error_states array, for example, without any debugging information but I don't implement it in this patch because it's better to check if enum pageflags is present to simplify design. Signed-off-by: HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> --- makedumpfile.c | 6 ++++++ makedumpfile.h | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 0d03716..cb64902 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1210,6 +1210,12 @@ get_value_for_old_linux(void) NUMBER(PG_private) = PG_private_ORIGINAL; if (NUMBER(PG_swapcache) == NOT_FOUND_NUMBER) NUMBER(PG_swapcache) = PG_swapcache_ORIGINAL; + if (NUMBER(PG_slab) == NOT_FOUND_NUMBER) + NUMBER(PG_slab) = PG_slab_ORIGINAL; + if (NUMBER(PG_buddy) == NOT_FOUND_NUMBER + && info->kernel_version >= KERNEL_VERSION(2, 6, 17) + && info->kernel_version <= KERNEL_VERSION(2, 6, 26)) + NUMBER(PG_buddy) = PG_buddy_v2_6_17_to_v2_6_26; return TRUE; } diff --git a/makedumpfile.h b/makedumpfile.h index 1304df0..fecb003 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -71,9 +71,12 @@ int get_mem_type(void); * The following values are for linux-2.6.25 or former. */ #define PG_lru_ORIGINAL (5) +#define PG_slab_ORIGINAL (7) #define PG_private_ORIGINAL (11) /* Has something at ->private */ #define PG_swapcache_ORIGINAL (15) /* Swap page: swp_entry_t in private */ +#define PG_buddy_v2_6_17_to_v2_6_26 (19) + #define PAGE_MAPPING_ANON (1) #define LSEEKED_BITMAP (1)