Blame SOURCES/gdb-rhbz1903375-s390x-store-on-condition.patch

59b2e3
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
59b2e3
From: Andreas Arnez <arnez@linux.ibm.com>
59b2e3
Date: Thu, 19 Nov 2020 19:10:58 +0100
59b2e3
Subject: gdb-rhbz1903375-s390x-store-on-condition.patch
59b2e3
59b2e3
;; Backport of "Correct recording of 'store on condition' insns"
59b2e3
;; Andreas Arnaz (RH BZ 1903374)
59b2e3
59b2e3
gdb/s390: Correct recording of "store on condition" insns
59b2e3
59b2e3
The "store on condition" instructions STOC, STOCG, and STOCFH are recorded
59b2e3
as if their instruction formats resembled that of STG.  This is wrong,
59b2e3
usually resulting in "failed to record execution log" errors when trying
59b2e3
to record code with any of these instructions.
59b2e3
59b2e3
This patch fixes the recording of these instructions.
59b2e3
59b2e3
gdb/ChangeLog:
59b2e3
59b2e3
	PR tdep/26916
59b2e3
	* s390-tdep.c (s390_process_record): Fix recording of STOC, STOCG,
59b2e3
	and STOCFH.
59b2e3
59b2e3
diff --git a/gdb/s390-tdep.c b/gdb/s390-tdep.c
59b2e3
--- a/gdb/s390-tdep.c
59b2e3
+++ b/gdb/s390-tdep.c
59b2e3
@@ -5380,7 +5380,6 @@ ex:
59b2e3
 	case 0xe325: /* NTSTG - nontransactional store */
59b2e3
 	case 0xe326: /* CVDY - convert to decimal */
59b2e3
 	case 0xe32f: /* STRVG - store reversed */
59b2e3
-	case 0xebe3: /* STOCG - store on condition */
59b2e3
 	case 0xed67: /* STDY - store */
59b2e3
 	  oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
59b2e3
 	  if (record_full_arch_list_add_mem (oaddr, 8))
59b2e3
@@ -5409,8 +5408,6 @@ ex:
59b2e3
 	case 0xe33e: /* STRV - store reversed */
59b2e3
 	case 0xe350: /* STY - store */
59b2e3
 	case 0xe3cb: /* STFH - store high */
59b2e3
-	case 0xebe1: /* STOCFH - store high on condition */
59b2e3
-	case 0xebf3: /* STOC - store on condition */
59b2e3
 	case 0xed66: /* STEY - store */
59b2e3
 	  oaddr = s390_record_calc_disp (gdbarch, regcache, inib[3], insn[1], ibyte[4]);
59b2e3
 	  if (record_full_arch_list_add_mem (oaddr, 4))
59b2e3
@@ -6123,6 +6120,20 @@ ex:
59b2e3
 
59b2e3
 	/* 0xeb9c-0xebbf undefined */
59b2e3
 	/* 0xebc1-0xebdb undefined */
59b2e3
+
59b2e3
+	case 0xebe1: /* STOCFH - store high on condition */
59b2e3
+	case 0xebf3: /* STOC - store on condition */
59b2e3
+	  oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
59b2e3
+	  if (record_full_arch_list_add_mem (oaddr, 4))
59b2e3
+	    return -1;
59b2e3
+	  break;
59b2e3
+
59b2e3
+	case 0xebe3: /* STOCG - store on condition */
59b2e3
+	  oaddr = s390_record_calc_disp (gdbarch, regcache, 0, insn[1], ibyte[4]);
59b2e3
+	  if (record_full_arch_list_add_mem (oaddr, 8))
59b2e3
+	    return -1;
59b2e3
+	  break;
59b2e3
+
59b2e3
 	/* 0xebe5 undefined */
59b2e3
 	/* 0xebe9 undefined */
59b2e3
 	/* 0xebeb-0xebf1 undefined */