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