[PATCH] s390: Fix printing of control and floating point registers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dave,

Control registers 8-15 (s390x and s390) and floating point registers 8-15
(s390x only) are not printed correctly because the we copy the content from
the wrong location of the save area.

Looks like nobody has realized this problem in the past because those
registers are not too important for debugging kernel problems...

This patch fixes this problem and now control and floating point registers
are printed correctly.

Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>
---
 s390.c  |   16 ++++++++--------
 s390x.c |   32 ++++++++++++++++----------------
 2 files changed, 24 insertions(+), 24 deletions(-)

--- a/s390.c
+++ b/s390.c
@@ -861,16 +861,16 @@ s390_print_lowcore(char* lc, struct bt_i
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
 
-	tmp[0]=ULONG(ptr);
-	tmp[1]=ULONG(ptr + S390_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 2 * S390_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 3 * S390_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8);
+	tmp[1]=ULONG(ptr + 9 * S390_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390_WORD_SIZE);
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
-	tmp[0]=ULONG(ptr + 4 * S390_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 5 * S390_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 6 * S390_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 7 * S390_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390_WORD_SIZE);
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
 
--- a/s390x.c
+++ b/s390x.c
@@ -1184,16 +1184,16 @@ s390x_print_lowcore(char* lc, struct bt_
 	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr);
-	tmp[1]=ULONG(ptr + S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 2 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 3 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8);
+	tmp[1]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 4 * S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 5 * S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 6 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
 
@@ -1211,16 +1211,16 @@ s390x_print_lowcore(char* lc, struct bt_
 	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 6 * S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 7 * S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 8 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 10* S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 11* S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 12* S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 13* S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
 }

Hi Dave,

Control registers 8-15 (s390x and s390) and floating point registers 8-15
(s390x only) are not printed correctly because the we copy the content from
a wrong location of the save area.

Looks like nobody has realized this problem in the past because those
registers are not too important for degugging kernel problems...

This patch fixes this problem and now control and floating point registers
are printed correctly.

Signed-off-by: Michael Holzheu <holzheu@xxxxxxxxxxxxxxxxxx>
---
 s390.c  |   16 ++++++++--------
 s390x.c |   32 ++++++++++++++++----------------
 2 files changed, 24 insertions(+), 24 deletions(-)

--- a/s390.c
+++ b/s390.c
@@ -861,16 +861,16 @@ s390_print_lowcore(char* lc, struct bt_i
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
 
-	tmp[0]=ULONG(ptr);
-	tmp[1]=ULONG(ptr + S390_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 2 * S390_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 3 * S390_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8);
+	tmp[1]=ULONG(ptr + 9 * S390_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390_WORD_SIZE);
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
-	tmp[0]=ULONG(ptr + 4 * S390_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 5 * S390_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 6 * S390_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 7 * S390_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390_WORD_SIZE);
 	fprintf(fp,"     %#010lx %#010lx %#010lx %#010lx\n", 
 		tmp[0], tmp[1], tmp[2], tmp[3]);
 
--- a/s390x.c
+++ b/s390x.c
@@ -1184,16 +1184,16 @@ s390x_print_lowcore(char* lc, struct bt_
 	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr);
-	tmp[1]=ULONG(ptr + S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 2 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 3 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8);
+	tmp[1]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 4 * S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 5 * S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 6 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
 
@@ -1211,16 +1211,16 @@ s390x_print_lowcore(char* lc, struct bt_
 	tmp[3]=ULONG(ptr + 7 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 6 * S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 7 * S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 8 * S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 8 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 9 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 10 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 11 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
-	tmp[0]=ULONG(ptr + 10* S390X_WORD_SIZE);
-	tmp[1]=ULONG(ptr + 11* S390X_WORD_SIZE);
-	tmp[2]=ULONG(ptr + 12* S390X_WORD_SIZE);
-	tmp[3]=ULONG(ptr + 13* S390X_WORD_SIZE);
+	tmp[0]=ULONG(ptr + 12 * S390X_WORD_SIZE);
+	tmp[1]=ULONG(ptr + 13 * S390X_WORD_SIZE);
+	tmp[2]=ULONG(ptr + 14 * S390X_WORD_SIZE);
+	tmp[3]=ULONG(ptr + 15 * S390X_WORD_SIZE);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[0],tmp[1]);
 	fprintf(fp,"     %#018lx %#018lx\n", tmp[2],tmp[3]);
 }
--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility

[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux