Hello Dave, Currently the s390dbf command uses KL_UINT() for reading pointers. This works only if the pointers are below 4 GiB. To fix this issue I now use a new KL_ULONG() function for reading pointers correctly. Michael --- s390dbf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) --- a/s390dbf.c +++ b/s390dbf.c @@ -139,9 +139,10 @@ static inline void* K_PTR(void* addr, ch return addr+MEMBER_OFFSET(struct_name,member_name); } -static inline uint32_t KL_UINT(void* ptr, char* struct_name, char* member_name) +static inline unsigned long KL_ULONG(void* ptr, char* struct_name, char* + member_name) { - return (uint32_t) ULONG(ptr+MEMBER_OFFSET(struct_name,member_name)); + return ULONG(ptr+MEMBER_OFFSET(struct_name,member_name)); } static inline uint32_t KL_VREAD_UINT32(kaddr_t addr) @@ -900,7 +901,7 @@ debug_get_areas_v1(debug_info_t* db_info area_size = PAGE_SIZE << db_info->page_order; db_info->areas = (void**)malloc(db_info->nr_areas * sizeof(void *)); memset(db_info->areas, 0, db_info->nr_areas * sizeof(void *)); - mem_pos = (kaddr_t) KL_UINT(k_dbi,"debug_info","areas"); + mem_pos = KL_ULONG(k_dbi,"debug_info","areas"); for (i = 0; i < db_info->nr_areas; i++) { dbe_addr = KL_VREAD_PTR(mem_pos); db_info->areas[i] = (debug_entry_t *) malloc(area_size); @@ -918,7 +919,7 @@ debug_get_areas_v2(debug_info_t* db_info kaddr_t page_ptr; int i,j; db_info->areas_v2=(void***)malloc(db_info->nr_areas * sizeof(void **)); - area_ptr = (kaddr_t) KL_UINT(k_dbi,"debug_info","areas"); + area_ptr = KL_ULONG(k_dbi,"debug_info","areas"); for (i = 0; i < db_info->nr_areas; i++) { db_info->areas_v2[i] = (void**)malloc(db_info->pages_per_area_v2 * sizeof(void*)); @@ -970,8 +971,8 @@ get_debug_info(kaddr_t addr,int get_area db_info->page_order = KL_INT(k_dbi,"debug_info","page_order"); db_info->buf_size = KL_INT(k_dbi,"debug_info","buf_size"); db_info->entry_size = KL_INT(k_dbi,"debug_info","entry_size"); - db_info->next_dbi = KL_UINT(k_dbi,"debug_info","next"); - db_info->prev_dbi = KL_UINT(k_dbi,"debug_info","prev"); + db_info->next_dbi = KL_ULONG(k_dbi,"debug_info","next"); + db_info->prev_dbi = KL_ULONG(k_dbi,"debug_info","prev"); db_info->addr = addr; strncpy(db_info->name,K_PTR(k_dbi,"debug_info","name"), DEBUG_MAX_PROCF_LEN);
Hello Dave, Currently the s390dbf command uses KL_UINT() for reading pointers. This works only if the pointers are below 4 GiB. To fix this issue, I now use a new KL_ULONG() function for reading pointers correctly. Michael --- s390dbf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) --- a/s390dbf.c +++ b/s390dbf.c @@ -139,9 +139,10 @@ static inline void* K_PTR(void* addr, ch return addr+MEMBER_OFFSET(struct_name,member_name); } -static inline uint32_t KL_UINT(void* ptr, char* struct_name, char* member_name) +static inline unsigned long KL_ULONG(void* ptr, char* struct_name, char* + member_name) { - return (uint32_t) ULONG(ptr+MEMBER_OFFSET(struct_name,member_name)); + return ULONG(ptr+MEMBER_OFFSET(struct_name,member_name)); } static inline uint32_t KL_VREAD_UINT32(kaddr_t addr) @@ -900,7 +901,7 @@ debug_get_areas_v1(debug_info_t* db_info area_size = PAGE_SIZE << db_info->page_order; db_info->areas = (void**)malloc(db_info->nr_areas * sizeof(void *)); memset(db_info->areas, 0, db_info->nr_areas * sizeof(void *)); - mem_pos = (kaddr_t) KL_UINT(k_dbi,"debug_info","areas"); + mem_pos = KL_ULONG(k_dbi,"debug_info","areas"); for (i = 0; i < db_info->nr_areas; i++) { dbe_addr = KL_VREAD_PTR(mem_pos); db_info->areas[i] = (debug_entry_t *) malloc(area_size); @@ -918,7 +919,7 @@ debug_get_areas_v2(debug_info_t* db_info kaddr_t page_ptr; int i,j; db_info->areas_v2=(void***)malloc(db_info->nr_areas * sizeof(void **)); - area_ptr = (kaddr_t) KL_UINT(k_dbi,"debug_info","areas"); + area_ptr = KL_ULONG(k_dbi,"debug_info","areas"); for (i = 0; i < db_info->nr_areas; i++) { db_info->areas_v2[i] = (void**)malloc(db_info->pages_per_area_v2 * sizeof(void*)); @@ -970,8 +971,8 @@ get_debug_info(kaddr_t addr,int get_area db_info->page_order = KL_INT(k_dbi,"debug_info","page_order"); db_info->buf_size = KL_INT(k_dbi,"debug_info","buf_size"); db_info->entry_size = KL_INT(k_dbi,"debug_info","entry_size"); - db_info->next_dbi = KL_UINT(k_dbi,"debug_info","next"); - db_info->prev_dbi = KL_UINT(k_dbi,"debug_info","prev"); + db_info->next_dbi = KL_ULONG(k_dbi,"debug_info","next"); + db_info->prev_dbi = KL_ULONG(k_dbi,"debug_info","prev"); db_info->addr = addr; strncpy(db_info->name,K_PTR(k_dbi,"debug_info","name"), DEBUG_MAX_PROCF_LEN);
-- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility