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

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