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

Dave Anderson anderson at redhat.com
Thu Sep 15 15:24:36 UTC 2011



----- Original Message -----
> 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 at linux.vnet.ibm.com>

Hi Michael,

The "ULONG(ptr + 8)" below doesn't seem right:

> --- 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);

And here as well:
 
> --- 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);

Shouldn't they both be:

  tmp[0]=ULONG(ptr + 8 * S390_WORD_SIZE);

Dave





More information about the Crash-utility mailing list