diff --git a/zdump/df_vmdump.h b/zdump/df_vmdump.h index 6b158fc7..22029826 100644 --- a/zdump/df_vmdump.h +++ b/zdump/df_vmdump.h @@ -38,6 +38,7 @@ const u8 ADSR_MAGIC[2] = { 0xe2, 0xd9 }; /* 'SR' EBCDIC */ const u8 VMDUMP_MAGIC[8] = { 0xe5, 0xd4, 0xc4, 0xe4, 0xd4, 0xd7, 0x40, 0x40 }; /* 'VMDUMP ' EBCDIC */ const u8 FMBK_MAGIC[8] = { 0xc8, 0xc3, 0xd7, 0xc4, 0xc6, 0xd4, 0xc2, 0xd2 }; /* 'HCPDFMBK' EBCDIC */ const u8 ALBK_MAGIC[8] = { 0xc8, 0xc3, 0xd7, 0xc4, 0xc1, 0xd3, 0xc2, 0xd2 }; /* 'HCPDALBK' EBCDIC */ +const u8 ASIZBK_MAGIC[8] = { 0xc1, 0xe2, 0xc9, 0xe9, 0xc2, 0xd2, 0x40, 0x40 };/* 'ASIZBK ' EBCDIC */ /* * Layout of dump symptom record . The ADSR is always the first record in @@ -110,12 +111,12 @@ struct vmd_oltble { u64 end_addr; } __packed; -struct vmd_asibk_64_new { - u8 id[8]; +struct vmd_asizbk { + u8 id[sizeof(ASIZBK_MAGIC)]; u8 as_token[8]; u8 spaceid[33]; u8 reserved1[2]; - u8 asibk_format; + u8 asizbk_format; u8 reserved2[12]; u64 storage_size_with_dcss; u64 storage_size_def_store; @@ -204,6 +205,6 @@ struct vmd_fir_other_64 { #define DF_VMDUMP_HDR_SIZE \ (sizeof(struct vmd_adsr) + sizeof(struct vmd_fmbk) + sizeof(struct vmd_fir_basic) + \ - sizeof(struct vmd_albk) + sizeof(struct vmd_asibk_64_new) + sizeof(struct vmd_fir_64)) + sizeof(struct vmd_albk) + sizeof(struct vmd_asizbk) + sizeof(struct vmd_fir_64)) #endif diff --git a/zdump/dfi_vmdump.c b/zdump/dfi_vmdump.c index f5b3913a..3787c30b 100644 --- a/zdump/dfi_vmdump.c +++ b/zdump/dfi_vmdump.c @@ -36,7 +36,7 @@ static struct { struct vmd_fir_basic fir_basic; /* Dump file info record */ struct vmd_albk albk; /* Dump access list record */ - struct vmd_asibk_64_new asibk_new; + struct vmd_asizbk asizbk; struct vmd_fir_64 fir; struct vmd_fir_other_64 *fir_other; @@ -81,7 +81,7 @@ static void vmdump64big_debug(void) util_log_print(UTIL_LOG_DEBUG, "Bit-Key Pages: %lu\n", l.bitkey_pages_count); util_log_print(UTIL_LOG_DEBUG, "Memory Offset: %#lx\n", l.memory_start_record); util_log_print(UTIL_LOG_DEBUG, "Total Pages : %lu\n", - l.asibk_new.storage_size_def_store / PAGE_SIZE); + l.asizbk.storage_size_def_store / PAGE_SIZE); util_log_print(UTIL_LOG_DEBUG, "Stored Pages : %lu\n", l.stored_pages_count); /* adsr */ @@ -185,9 +185,11 @@ static void vmdump64big_init(void) zg_seek(g.fh, (l.fmbk.rec_nr_access - 1) * PAGE_SIZE, SEEK_SET); zg_read(g.fh, &l.albk, sizeof(l.albk), SEEK_SET); - /* Record 9: asibk */ + /* Record 9: asizbk */ zg_seek(g.fh, l.fmbk.rec_nr_access * PAGE_SIZE, ZG_CHECK); - zg_read(g.fh, &l.asibk_new, sizeof(l.asibk_new), ZG_CHECK); + zg_read(g.fh, &l.asizbk, sizeof(l.asizbk), ZG_CHECK); + if (memcmp(l.asizbk.id, ASIZBK_MAGIC, sizeof(l.asizbk.id))) + ERR_EXIT("Dump file inconsistent, invalid ASIZBK record detected"); l.memory_start_record = (l.fmbk.rec_nr_access + 1) * PAGE_SIZE; @@ -195,8 +197,8 @@ static void vmdump64big_init(void) * Record 10: bitmaps: * Read all bitmap pages and setup bitmap array */ - nr_dumped_pages = l.asibk_new.storage_size_def_store / PAGE_SIZE; - bitmap_sz = l.asibk_new.storage_size_def_store / (PAGE_SIZE * 8); + nr_dumped_pages = l.asizbk.storage_size_def_store / PAGE_SIZE; + bitmap_sz = l.asizbk.storage_size_def_store / (PAGE_SIZE * 8); if (!bitmap_sz) ERR_EXIT("Dump file inconsistent, no bitmap detected"); l.bitmap = util_zalloc(bitmap_sz); @@ -441,7 +443,7 @@ static u64 find_bitrange(u8 *bitmap, const u64 bit, const u64 max, const bool is static void mem_init(void) { - u64 nr_dumped_pages = l.asibk_new.storage_size_def_store / PAGE_SIZE; + u64 nr_dumped_pages = l.asizbk.storage_size_def_store / PAGE_SIZE; u64 pos, more; for (pos = 0; pos < nr_dumped_pages;) {