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

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