FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Crash Utility

 
 
LinkBack Thread Tools
 
Old 09-28-2010, 12:13 PM
Michael Holzheu
 
Default s390dbf: Fix reading of 64 bit pointers

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@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
 
Old 09-28-2010, 01:06 PM
Dave Anderson
 
Default s390dbf: Fix reading of 64 bit pointers

----- "Michael Holzheu" <holzheu@linux.vnet.ibm.com> wrote:

> 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

Thanks Michael -- queued for the next release.

Dave

> ---
> 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@redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility

--
Crash-utility mailing list
Crash-utility@redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility
 

Thread Tools




All times are GMT. The time now is 07:25 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org